aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1999-09-11 21:04:09 +0000
committerIan Lance Taylor <ian@airs.com>1999-09-11 21:04:09 +0000
commitd510f9a69bb51f308048a8aa6dc5d0ae1c54378f (patch)
treec5c8710999318f32e2dc04020358fff7c96f8eb4
parenteeaf533e61c0bdf736992f32b7ee7d25a4ba458b (diff)
downloadgdb-d510f9a69bb51f308048a8aa6dc5d0ae1c54378f.zip
gdb-d510f9a69bb51f308048a8aa6dc5d0ae1c54378f.tar.gz
gdb-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.
-rw-r--r--bfd/ChangeLog3
-rw-r--r--bfd/coffcode.h12
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