From d510f9a69bb51f308048a8aa6dc5d0ae1c54378f Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sat, 11 Sep 1999 21:04:09 +0000 Subject: [PATCH] 1999-09-11 Donn Terry * 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 | 3 +++ bfd/coffcode.h | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e358175656e..df32dda3e97 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 36bf3e75977..eac8e84bea4 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 -- 2.30.2