aboutsummaryrefslogtreecommitdiff
path: root/bfd/coffgen.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1995-10-09 23:32:22 +0000
committerIan Lance Taylor <ian@airs.com>1995-10-09 23:32:22 +0000
commit49488f2b2dc4d17b6f62b7f9f4494e0edb8fd035 (patch)
treefe0ecb969338d65394e5b65d9da0f7e0be8ce60b /bfd/coffgen.c
parent24e60978684ee2f137dc270ea3c3ef28da25ed37 (diff)
downloadgdb-49488f2b2dc4d17b6f62b7f9f4494e0edb8fd035.zip
gdb-49488f2b2dc4d17b6f62b7f9f4494e0edb8fd035.tar.gz
gdb-49488f2b2dc4d17b6f62b7f9f4494e0edb8fd035.tar.bz2
* coffcode.h (combined_entry_type): Add fix_line field.
(coff_slurp_line_table): Warn if we try to set the lineno field of a symbol twice. (coff_slurp_symbol_table): If RS6000COFF_C, handle C_BINCL and C_EINCL by setting fix_line. Fix C_BSTAT symbol value. * coffgen.c (coff_mangle_symbols): Handle fix_line. (coff_write_symbol): Only use N_DEBUG if the symbol is in the absolute section. (coff_print_symbol): Print fix_value symbols in a useful fashion. * libcoff.h: Rebuild.
Diffstat (limited to 'bfd/coffgen.c')
-rw-r--r--bfd/coffgen.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/bfd/coffgen.c b/bfd/coffgen.c
index 2f36447..d9c58e3 100644
--- a/bfd/coffgen.c
+++ b/bfd/coffgen.c
@@ -576,6 +576,18 @@ coff_mangle_symbols (bfd_ptr)
((combined_entry_type *) s->u.syment.n_value)->offset;
s->fix_value = 0;
}
+ if (s->fix_line)
+ {
+ /* The value is the offset into the line number entries
+ for the symbol's section. On output, the symbol's
+ section should be N_DEBUG. */
+ s->u.syment.n_value =
+ (coff_symbol_ptr->symbol.section->output_section->line_filepos
+ + s->u.syment.n_value * bfd_coff_linesz (bfd_ptr));
+ coff_symbol_ptr->symbol.section =
+ coff_section_from_bfd_index (bfd_ptr, N_DEBUG);
+ BFD_ASSERT (coff_symbol_ptr->symbol.flags & BSF_DEBUGGING);
+ }
for (i = 0; i < s->u.syment.n_numaux; i++)
{
combined_entry_type *a = s + i + 1;
@@ -729,7 +741,8 @@ coff_write_symbol (abfd, symbol, native, written, string_size_p,
if (native->u.syment.n_sclass == C_FILE)
symbol->flags |= BSF_DEBUGGING;
- if (symbol->flags & BSF_DEBUGGING)
+ if (symbol->flags & BSF_DEBUGGING
+ && bfd_is_abs_section (symbol->section))
{
native->u.syment.n_scnum = N_DEBUG;
}
@@ -1699,6 +1712,7 @@ coff_print_symbol (abfd, filep, symbol, how)
case bfd_print_symbol_all:
if (coffsymbol (symbol)->native)
{
+ unsigned long val;
unsigned int aux;
combined_entry_type *combined = coffsymbol (symbol)->native;
combined_entry_type *root = obj_raw_syments (abfd);
@@ -1706,6 +1720,13 @@ coff_print_symbol (abfd, filep, symbol, how)
fprintf (file, "[%3ld]", (long) (combined - root));
+ if (! combined->fix_value)
+ val = (unsigned long) combined->u.syment.n_value;
+ else
+ val = ((unsigned long)
+ ((combined_entry_type *) combined->u.syment.n_value
+ - root));
+
fprintf (file,
"(sec %2d)(fl 0x%02x)(ty %3x)(scl %3d) (nx %d) 0x%08lx %s",
combined->u.syment.n_scnum,
@@ -1713,7 +1734,7 @@ coff_print_symbol (abfd, filep, symbol, how)
combined->u.syment.n_type,
combined->u.syment.n_sclass,
combined->u.syment.n_numaux,
- (unsigned long) combined->u.syment.n_value,
+ val,
symbol->name);
for (aux = 0; aux < combined->u.syment.n_numaux; aux++)