diff options
author | Ian Lance Taylor <ian@airs.com> | 1996-02-02 17:46:05 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1996-02-02 17:46:05 +0000 |
commit | e24cf2b556c64426980bc2ffcbce0da05284da4e (patch) | |
tree | 9324c03b79e000cf42c4a4d4afcfbab5dc87d95d /gas/config/obj-bout.c | |
parent | 4771fe157f5360608c445a91bb6bd556a30f93e6 (diff) | |
download | gdb-e24cf2b556c64426980bc2ffcbce0da05284da4e.zip gdb-e24cf2b556c64426980bc2ffcbce0da05284da4e.tar.gz gdb-e24cf2b556c64426980bc2ffcbce0da05284da4e.tar.bz2 |
* write.c (write_relocs): Use S_IS_DEFINED and S_IS_COMMON rather
than comparing S_GET_SEGMENT to undefined_section.
(write_object_file): Skip symbols which were equated to an
undefined or common symbol.
* symbols.c (resolve_symbol_value): Use S_IS_DEFINED and
S_IS_COMMON rather than comparing S_GET_SEGMENT to
undefined_section.
(S_GET_VALUE): Likewise. Avoid recursion problems if S_IS_DEFINED
or S_IS_COMMON call S_GET_VALUE.
* config/obj-aout.h (S_IS_COMMON): Define if not BFD_ASSEMBLER.
* config/obj-aout.c (obj_emit_relocations): If a reloc is equated
to an undefined or common symbol, convert the reloc to be against
the target symbol.
(obj_crawl_symbol_chain): Skip symbols which were equated to an
undefined or common symbol.
* config/obj-bout.h (S_IS_COMMON): Define if not BFD_ASSEMBLER.
* config/obj-bout.c (obj_emit_relocations): If a reloc is equated
to an undefined or common symbol, convert the reloc to be against
the target symbol.
(obj_crawl_symbol_chain): Skip symbols which were equated to an
undefined or common symbol.
* config/obj-coff.c (do_relocs_for): Use S_IS_DEFINED and
S_IS_COMMON rather than comparing S_GET_SEGMENT to
undefined_section.
(yank_symbols): Skip symbols which were equated to an undefined or
common symbol.
Diffstat (limited to 'gas/config/obj-bout.c')
-rw-r--r-- | gas/config/obj-bout.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gas/config/obj-bout.c b/gas/config/obj-bout.c index ba7cadc..0136c17 100644 --- a/gas/config/obj-bout.c +++ b/gas/config/obj-bout.c @@ -96,6 +96,14 @@ obj_emit_relocations (where, fixP, segment_address_in_file) if (fixP->fx_done == 0 || fixP->fx_r_type != NO_RELOC) { + symbolS *sym; + + sym = fixP->fx_addsy; + while (sym->sy_value.X_op == O_symbol + && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym))) + sym = sym->sy_value.X_add_symbol; + fixP->fx_addsy = sym; + tc_bout_fix_to_chars (*where, fixP, segment_address_in_file); *where += sizeof (struct relocation_info); } /* if there's a symbol */ @@ -246,6 +254,15 @@ obj_crawl_symbol_chain (headers) resolve_symbol_value (symbolP); + /* Skip symbols which were equated to undefined or common + symbols. */ + if (symbolP->sy_value.X_op == O_symbol + && (! S_IS_DEFINED (symbolP) || S_IS_COMMON (symbolP))) + { + *symbolPP = symbol_next (symbolP); + continue; + } + /* OK, here is how we decide which symbols go out into the brave new symtab. Symbols that do are: |