1999-09-11 Donn Terry <donn@interix.com>
authorIan Lance Taylor <ian@airs.com>
Sat, 11 Sep 1999 21:04:09 +0000 (21:04 +0000)
committerIan Lance Taylor <ian@airs.com>
Sat, 11 Sep 1999 21:04:09 +0000 (21:04 +0000)
* coffcode.h (coff_slurp_symbol_table): If PE, set BSF_DEBUGGING
for C_FCN/C_EFCN symbols, and set BSF_DEBUGGING_RELOC for such
symbols named .bf.

bfd/ChangeLog
bfd/coffcode.h

index e358175656ea3d779082ec892956bcf2ac8be035..df32dda3e977804c45077636dee443ae9397d1da 100644 (file)
@@ -12,6 +12,9 @@
        function symbols.
 
        * syms.c (BSF_DEBUGGING_RELOC): Define.
+       * coffcode.h (coff_slurp_symbol_table): If PE, set BSF_DEBUGGING
+       for C_FCN/C_EFCN symbols, and set BSF_DEBUGGING_RELOC for such
+       symbols named .bf.
        * coffgen.c (fixup_symbol_value): Relocate a symbol which has
        BSF_DEBUGGING_RELOC set.
        * bfd-in2.h: Rebuild.
index 36bf3e759772b91e89891af358c57d758898bce3..eac8e84bea4aa080a384d9e77b3bbf6943fe61bd 100644 (file)
@@ -4139,16 +4139,24 @@ coff_slurp_symbol_table (abfd)
 #endif
 
            case C_BLOCK:       /* ".bb" or ".eb"                */
-           case C_FCN:         /* ".bf" or ".ef"                */
+           case C_FCN:         /* ".bf" or ".ef" (or PE ".lf")  */
            case C_EFCN:        /* physical end of function      */
-             dst->symbol.flags = BSF_LOCAL;
 #if defined COFF_WITH_PE
              /* PE sets the symbol to a value relative to the start
                 of the section.  */
              dst->symbol.value = src->u.syment.n_value;
+             if (strcmp (dst->symbol.name, ".bf") != 0)
+               {
+                 /* PE uses funny values for .ef and .lf; don't
+                     relocate them.  */
+                 dst->symbol.flags = BSF_DEBUGGING;
+               }
+             else
+               dst->symbol.flags = BSF_DEBUGGING | BSF_DEBUGGING_RELOC;
 #else
              /* Base the value as an index from the base of the
                 section.  */
+             dst->symbol.flags = BSF_LOCAL;
              dst->symbol.value = (src->u.syment.n_value
                                   - dst->symbol.section->vma);
 #endif