HPPA/SOM Patch
Mark Klein
mklein@dis.com
Thu Jul 1 00:00:00 GMT 1999
The patch below will propagate Ian's fixes to SOM. While it now compiles
cleanly, I do get the following in my testing:
/tmp(303): as -v enquire.s
GNU assembler version 2.9.4 (hppa1.0-hp-mpeix) using BFD version 2.9.4
enquire.s: Assembler messages:
enquire.s:33753: Internal error, aborting at ../../gas/symbols.c line 93 in symb
ol_new
Please report this bug.
/tmp(304):
It appears that the symbol table is locked.
1999-06-04 Mark Klein <mklein@dis.com>
* config/tc-hppa.c: Propagate symbol handling changes to SOM.
Index: tc-hppa.c
===================================================================
RCS file: /cvs/binutils/binutils/gas/config/tc-hppa.c,v
retrieving revision 1.4
diff -c -r1.4 tc-hppa.c
*** tc-hppa.c 1999/06/03 12:42:35 1.4
--- tc-hppa.c 1999/06/04 17:30:12
***************
*** 2813,2819 ****
{
code = *codes[i];
! relocs[i]->sym_ptr_ptr = &fixp->fx_addsy->bsym;
relocs[i]->howto = bfd_reloc_type_lookup (stdoutput, code);
relocs[i]->address = fixp->fx_frag->fr_address + fixp->fx_where;
--- 2813,2820 ----
{
code = *codes[i];
! relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[i]->howto = bfd_reloc_type_lookup (stdoutput, code);
relocs[i]->address = fixp->fx_frag->fr_address + fixp->fx_where;
***************
*** 2824,2846 ****
of two symbols. With that in mind we fill in all four
relocs now and break out of the loop. */
assert (i == 1);
! relocs[0]->sym_ptr_ptr = (asymbol **) &bfd_abs_symbol;
relocs[0]->howto = bfd_reloc_type_lookup (stdoutput, *codes[0]);
relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[0]->addend = 0;
! relocs[1]->sym_ptr_ptr = &fixp->fx_addsy->bsym;
relocs[1]->howto = bfd_reloc_type_lookup (stdoutput, *codes[1]);
relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[1]->addend = 0;
! relocs[2]->sym_ptr_ptr = &fixp->fx_subsy->bsym;
relocs[2]->howto = bfd_reloc_type_lookup (stdoutput, *codes[2]);
relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[2]->addend = 0;
! relocs[3]->sym_ptr_ptr = (asymbol **) &bfd_abs_symbol;
relocs[3]->howto = bfd_reloc_type_lookup (stdoutput, *codes[3]);
relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[3]->addend = 0;
! relocs[4]->sym_ptr_ptr = (asymbol **) &bfd_abs_symbol;
relocs[4]->howto = bfd_reloc_type_lookup (stdoutput, *codes[4]);
relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[4]->addend = 0;
--- 2825,2852 ----
of two symbols. With that in mind we fill in all four
relocs now and break out of the loop. */
assert (i == 1);
! relocs[0]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[0]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[0]->howto = bfd_reloc_type_lookup (stdoutput, *codes[0]);
relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[0]->addend = 0;
! relocs[1]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[1]->howto = bfd_reloc_type_lookup (stdoutput, *codes[1]);
relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[1]->addend = 0;
! relocs[2]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[2]->howto = bfd_reloc_type_lookup (stdoutput, *codes[2]);
relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[2]->addend = 0;
! relocs[3]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[3]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[3]->howto = bfd_reloc_type_lookup (stdoutput, *codes[3]);
relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[3]->addend = 0;
! relocs[4]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[4]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[4]->howto = bfd_reloc_type_lookup (stdoutput, *codes[4]);
relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[4]->addend = 0;
***************
*** 2878,2884 ****
case R_N0SEL:
case R_N1SEL:
/* There is no symbol or addend associated with these fixups. */
! relocs[i]->sym_ptr_ptr = &dummy_symbol->bsym;
relocs[i]->addend = 0;
break;
--- 2884,2891 ----
case R_N0SEL:
case R_N1SEL:
/* There is no symbol or addend associated with these fixups. */
! relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
relocs[i]->addend = 0;
break;
***************
*** 2886,2892 ****
case R_ENTRY:
case R_EXIT:
/* There is no symbol associated with these fixups. */
! relocs[i]->sym_ptr_ptr = &dummy_symbol->bsym;
relocs[i]->addend = fixp->fx_offset;
break;
--- 2893,2900 ----
case R_ENTRY:
case R_EXIT:
/* There is no symbol associated with these fixups. */
! relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
! *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
relocs[i]->addend = fixp->fx_offset;
break;
***************
*** 6555,6561 ****
&& (hppa_fix->segment->flags & SEC_CODE))
{
/* Apparently sy_used_in_reloc never gets set for sub symbols. */
! fixp->fx_subsy->sy_used_in_reloc = 1;
return 0;
}
--- 6563,6569 ----
&& (hppa_fix->segment->flags & SEC_CODE))
{
/* Apparently sy_used_in_reloc never gets set for sub symbols. */
! symbol_mark_used_in_reloc (fixp->fx_subsy);
return 0;
}
More information about the Binutils
mailing list