diff options
author | Ian Lance Taylor <ian@airs.com> | 1999-09-11 21:04:09 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1999-09-11 21:04:09 +0000 |
commit | d510f9a69bb51f308048a8aa6dc5d0ae1c54378f (patch) | |
tree | c5c8710999318f32e2dc04020358fff7c96f8eb4 /bfd | |
parent | eeaf533e61c0bdf736992f32b7ee7d25a4ba458b (diff) | |
download | binutils-d510f9a69bb51f308048a8aa6dc5d0ae1c54378f.zip binutils-d510f9a69bb51f308048a8aa6dc5d0ae1c54378f.tar.gz binutils-d510f9a69bb51f308048a8aa6dc5d0ae1c54378f.tar.bz2 |
1999-09-11 Donn Terry <donn@interix.com>
* 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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 3 | ||||
-rw-r--r-- | bfd/coffcode.h | 12 |
2 files changed, 13 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e358175..df32dda 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 36bf3e7..eac8e84 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -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 |