1999-06-04 Mark Klein <mklein@dis.com>

* config/tc-hppa.c (md_begin): Convert local symbol dummy_symbol
	to real if OBJ_SOM
	(tc_gen_reloc): Still need bfd_abs_symbol in some relocs.
This commit is contained in:
Ian Lance Taylor 1999-06-04 21:08:54 +00:00
parent 77e0b0efdb
commit 993142d5a4
2 changed files with 21 additions and 15 deletions

View file

@ -1,5 +1,9 @@
1999-06-04 Mark Klein <mklein@dis.com> 1999-06-04 Mark Klein <mklein@dis.com>
* config/tc-hppa.c (md_begin): Convert local symbol dummy_symbol
to real if OBJ_SOM
(tc_gen_reloc): Still need bfd_abs_symbol in some relocs.
* config/tc-hppa.c: Update for symbol handling changes. * config/tc-hppa.c: Update for symbol handling changes.
1999-06-03 Ian Lance Taylor <ian@zembu.com> 1999-06-03 Ian Lance Taylor <ian@zembu.com>

View file

@ -702,9 +702,10 @@ static label_symbol_struct *label_symbols_rootp = NULL;
/* Holds the last field selector. */ /* Holds the last field selector. */
static int hppa_field_selector; static int hppa_field_selector;
#ifdef OBJ_SOM
/* A dummy bfd symbol so that all relocations have symbols of some kind. */ /* A dummy bfd symbol so that all relocations have symbols of some kind. */
static symbolS *dummy_symbol; static symbolS *dummy_symbol;
#endif
/* Nonzero if errors are to be printed. */ /* Nonzero if errors are to be printed. */
static int print_errors = 1; static int print_errors = 1;
@ -1339,8 +1340,12 @@ md_begin ()
anything into the old one switch to the new one now. */ anything into the old one switch to the new one now. */
subseg_set (text_section, 0); subseg_set (text_section, 0);
#ifdef OBJ_SOM
dummy_symbol = symbol_find_or_make ("L$dummy"); dummy_symbol = symbol_find_or_make ("L$dummy");
S_SET_SEGMENT (dummy_symbol, text_section); S_SET_SEGMENT (dummy_symbol, text_section);
/* Force the symbol to be converted to a real symbol. */
(void) symbol_get_bfdsym (dummy_symbol);
#endif
} }
/* Assemble a single instruction storing it into a frag. */ /* Assemble a single instruction storing it into a frag. */
@ -2825,28 +2830,25 @@ tc_gen_reloc (section, fixp)
of two symbols. With that in mind we fill in all four of two symbols. With that in mind we fill in all four
relocs now and break out of the loop. */ relocs now and break out of the loop. */
assert (i == 1); assert (i == 1);
relocs[0]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[0]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
*relocs[0]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[0]->howto = bfd_reloc_type_lookup (stdoutput, *codes[0]); relocs[0]->howto = bfd_reloc_type_lookup (stdoutput, *codes[0]);
relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[0]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[0]->addend = 0; relocs[0]->addend = 0;
relocs[1]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[1]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); *relocs[1]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[1]->howto = bfd_reloc_type_lookup (stdoutput, *codes[1]); relocs[1]->howto = bfd_reloc_type_lookup (stdoutput, *codes[1]);
relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[1]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[1]->addend = 0; relocs[1]->addend = 0;
relocs[2]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[2]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); *relocs[2]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_subsy);
relocs[2]->howto = bfd_reloc_type_lookup (stdoutput, *codes[2]); relocs[2]->howto = bfd_reloc_type_lookup (stdoutput, *codes[2]);
relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[2]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[2]->addend = 0; relocs[2]->addend = 0;
relocs[3]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[3]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
*relocs[3]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[3]->howto = bfd_reloc_type_lookup (stdoutput, *codes[3]); relocs[3]->howto = bfd_reloc_type_lookup (stdoutput, *codes[3]);
relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[3]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[3]->addend = 0; relocs[3]->addend = 0;
relocs[4]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[4]->sym_ptr_ptr = (asymbol **) &(bfd_abs_symbol);
*relocs[4]->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
relocs[4]->howto = bfd_reloc_type_lookup (stdoutput, *codes[4]); relocs[4]->howto = bfd_reloc_type_lookup (stdoutput, *codes[4]);
relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where; relocs[4]->address = fixp->fx_frag->fr_address + fixp->fx_where;
relocs[4]->addend = 0; relocs[4]->addend = 0;
@ -2884,8 +2886,8 @@ tc_gen_reloc (section, fixp)
case R_N0SEL: case R_N0SEL:
case R_N1SEL: case R_N1SEL:
/* There is no symbol or addend associated with these fixups. */ /* There is no symbol or addend associated with these fixups. */
relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol); *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
relocs[i]->addend = 0; relocs[i]->addend = 0;
break; break;
@ -2893,8 +2895,8 @@ tc_gen_reloc (section, fixp)
case R_ENTRY: case R_ENTRY:
case R_EXIT: case R_EXIT:
/* There is no symbol associated with these fixups. */ /* There is no symbol associated with these fixups. */
relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); relocs[i]->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
*relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol); *relocs[i]->sym_ptr_ptr = symbol_get_bfdsym (dummy_symbol);
relocs[i]->addend = fixp->fx_offset; relocs[i]->addend = fixp->fx_offset;
break; break;