* ecofflink.c (bfd_ecoff_debug_externals): If a small undefined
authorIan Lance Taylor <ian@airs.com>
Fri, 4 Feb 1994 04:18:28 +0000 (04:18 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 4 Feb 1994 04:18:28 +0000 (04:18 +0000)
symbol has a value in the ECOFF symbol but not in the BFD symbol,
keep the value in the ECOFF symbol.  This helps gas.

bfd/ChangeLog
bfd/ecofflink.c

index 63c3738..976140f 100644 (file)
@@ -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.
index 523a4bf..306f028 100644 (file)
@@ -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