diff options
author | Stu Grossman <grossman@cygnus> | 1997-01-04 00:33:01 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1997-01-04 00:33:01 +0000 |
commit | 4c681116af400ae163c0772ffca9e7fdc92e036c (patch) | |
tree | fe0c7c8be303036c6b0d84512f0da3f4adea795d /gdb/symtab.c | |
parent | 6c310da826b31a1ce75469b0c402a75dafbf19b1 (diff) | |
download | gdb-4c681116af400ae163c0772ffca9e7fdc92e036c.zip gdb-4c681116af400ae163c0772ffca9e7fdc92e036c.tar.gz gdb-4c681116af400ae163c0772ffca9e7fdc92e036c.tar.bz2 |
* Makefile.in configure configure.in: Remove ENABLE_CLIBS,
ENABLE_OBS, and THREAD_DB_OBS. These are consolidated into LIBS
and CONFIG_OBS.
* configure configure.in: Clean up test cases around thread support.
start-sanitize-v850
* configure.tgt (v850-*-*): Include v850ice.o and v850.lib if
host is Windows.
end-sanitize-v850
* c-valprint.c ch-valprint.c cp-valprint.c eval.c expprint.c
printcmd.c valops.c value.h values.c: Add bfd_section arg to
value_at and value_at_lazy.
* coffread.c dbxread.c elfread.c mdebugread.c minsyms.c symtab.h:
Add bfd_section arg to prim_record_minimal_symbol_and_info.
* corefile.c gdbcore.h printcmd.c valops.c: Use read_memory_section
instead of read_memory. It takes a bfd_section arg.
* coffread.c dbxread.c elfread.c gdb-stabs.h objfiles.h: Remove
unnecessary cast for assignment of struct dbx_symfile_info.
Struct objfile now uses a real pointer instead of PTR for this
element.
* dbxread.c (dbx_symfile_init): Stash bfd section pointers for
text, data and bss into dbx_symfile_info.
* exec.c (xfer_memory): Handle transfers for user-specified
sections.
* findvar.c (read_var_value locate_var_value): Copy bfd section
from the symbol to the value.
* gdb-stabs.h: Add section pointers for text, data and bss
sections.
* maint.c (translate address command): Add test code for overlay
address translation.
* printcmd.c (do_examine do_one_display): Now takes a bfd section
arg.
* (print_formatted x_command): Record current section along with
current address for repeated commands.
* sparc-nat.c (fetch_inferior_registers): Change
target_xfer_memory to target_{read write}_memory to allow changes
to target_xfer_memory interface for section info.
* symmisc.c (dump_msymbols print_symbol): Print section
assocaited with symbol.
* symtab.c (fixup_symbol_section): New routine to
add section info to symbols returned by lookup_symbol.
* symtab.h (struct general_symbol_info): Add bfd section to
symbols.
* target.c target.h (target_xfer_memory): Add bfd section to
args.
* (target_read_memory_section): New routine to read data from a
specific section.
* (target_memory_bfd_section): New global variable to pass bfd
section in to targets.
* valarith.c (value_add value_addr value_array): Preserve bfd
section when computing new value.
* value.h (struct value): Add bfd section to values.
* values.c (allocate_value value_copy): Initialize/preserve bfd
section.
* (unpack_double): Clean up _MSC_VER conditionals to remove
duplicate code.
start-sanitize-v850
* v850ice.c: New module to support communication with NEC's
PC-based ICE.
* config/v850/tm-v850.h (REGISTER_NAMES): Replace sp, gp, fp, and
ep names with rxx names. sp and fp are renamed via a different
mechanism.
end-sanitize-v850
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 48 |
1 files changed, 37 insertions, 11 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index ccfdf67..bc20016 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -459,6 +459,30 @@ find_pc_psymbol (psymtab, pc) return best; } +/* Debug symbols usually don't have section information. We need to dig that + out of the minimal symbols and stash that in the debug symbol. */ + +static +struct symbol * fixup_symbol_section PARAMS ((struct symbol *sym, + struct objfile *objfile)); +static struct symbol * +fixup_symbol_section (sym, objfile) + struct symbol *sym; + struct objfile *objfile; +{ + struct minimal_symbol *msym; + + if (SYMBOL_BFD_SECTION (sym)) + return sym; + + msym = lookup_minimal_symbol (SYMBOL_NAME (sym), NULL, objfile); + + if (msym) + SYMBOL_BFD_SECTION (sym) = SYMBOL_BFD_SECTION (msym); + + return sym; +} + /* Find the definition for a specified symbol name NAME in namespace NAMESPACE, visible from lexical block BLOCK. @@ -493,7 +517,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab) register struct symtab *s = NULL; register struct partial_symtab *ps; struct blockvector *bv; - register struct objfile *objfile; + register struct objfile *objfile = NULL; register struct block *b; register struct minimal_symbol *msymbol; @@ -521,7 +545,7 @@ found: *symtab = s; } - return (sym); + return fixup_symbol_section (sym, objfile); } block = BLOCK_SUPERBLOCK (block); } @@ -550,7 +574,7 @@ found: block_found = b; if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } } } @@ -569,7 +593,7 @@ found: *is_a_field_of_this = 1; if (symtab != NULL) *symtab = NULL; - return 0; + return NULL; } } @@ -586,7 +610,7 @@ found: block_found = block; if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } } @@ -630,7 +654,7 @@ found: if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } else if (MSYMBOL_TYPE (msymbol) != mst_text && MSYMBOL_TYPE (msymbol) != mst_file_text @@ -638,8 +662,10 @@ found: { /* This is a mangled variable, look it up by its mangled name. */ - return lookup_symbol (SYMBOL_NAME (msymbol), block, - namespace, is_a_field_of_this, symtab); + return fixup_symbol_section + (lookup_symbol (SYMBOL_NAME (msymbol), block, + namespace, is_a_field_of_this, symtab), + NULL); } /* There are no debug symbols for this file, or we are looking for an unmangled variable. @@ -659,7 +685,7 @@ found: error ("Internal: global symbol `%s' found in %s psymtab but not in symtab", name, ps->filename); if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } } @@ -677,7 +703,7 @@ found: block_found = block; if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } } @@ -693,7 +719,7 @@ found: error ("Internal: static symbol `%s' found in %s psymtab but not in symtab", name, ps->filename); if (symtab != NULL) *symtab = s; - return sym; + return fixup_symbol_section (sym, objfile); } } |