diff options
-rw-r--r-- | bfd/ChangeLog | 4 | ||||
-rw-r--r-- | bfd/ecofflink.c | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 63c3738..976140f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,9 @@ Thu Feb 3 16:49:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + * ecofflink.c (bfd_ecoff_debug_externals): If a small undefined + symbol has a value in the ECOFF symbol but not in the BFD symbol, + keep the value in the ECOFF symbol. This helps gas. + * linker.c (_bfd_generic_link_output_symbols, _bfd_generic_link_write_global_symbol): Don't require that all references to a common symbol be themselves common symbols. diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c index 523a4bf..306f028 100644 --- a/bfd/ecofflink.c +++ b/bfd/ecofflink.c @@ -991,7 +991,15 @@ bfd_ecoff_debug_externals (abfd, debug, swap, relocateable, get_extr, if (bfd_is_com_section (sym_ptr->section) || sym_ptr->section == &bfd_und_section) - esym.asym.value = sym_ptr->value; + { + /* FIXME: gas does not keep the value of a small undefined + symbol in the symbol itself, because of relocation + problems. */ + if (esym.asym.sc != scSUndefined + || esym.asym.value == 0 + || sym_ptr->value != 0) + esym.asym.value = sym_ptr->value; + } else esym.asym.value = (sym_ptr->value + sym_ptr->section->output_offset |