diff options
author | Ian Lance Taylor <ian@airs.com> | 1995-10-09 23:32:22 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1995-10-09 23:32:22 +0000 |
commit | 49488f2b2dc4d17b6f62b7f9f4494e0edb8fd035 (patch) | |
tree | fe0ecb969338d65394e5b65d9da0f7e0be8ce60b /bfd/coffgen.c | |
parent | 24e60978684ee2f137dc270ea3c3ef28da25ed37 (diff) | |
download | gdb-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.c | 25 |
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++) |