diff options
author | Michael Snyder <msnyder@vmware.com> | 1997-04-03 23:19:46 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1997-04-03 23:19:46 +0000 |
commit | b9580b812cd50f88b9bd63603bec6aeeedf75cdf (patch) | |
tree | b0adb52d66af883de4d25f86a1d58037bdefe609 /gdb/maint.c | |
parent | 4eb4b87e13548a3cdf14f779d52dd51f50bff5e6 (diff) | |
download | gdb-b9580b812cd50f88b9bd63603bec6aeeedf75cdf.zip gdb-b9580b812cd50f88b9bd63603bec6aeeedf75cdf.tar.gz gdb-b9580b812cd50f88b9bd63603bec6aeeedf75cdf.tar.bz2 |
Thu Apr 3 15:10:30 1997 Michael Snyder <msnyder@cleaver.cygnus.com>
Except for the two m32r modules, this checkin is for
overlay support.
* blockframe.c: blockvector_for_pc_sect(), block_for_pc_sect(),
find_pc_sect_function(), find_pc_sect_partial_function(): new
functions for debugging overlays; pc without section is ambiguous.
* breakpoint.[ch]: add section pointer to breakpoint struct;
add section argument to check_duplicates(); check section as well
as pc in [breakpoint_here_p(), breakpoint_inserted_here_p(),
breakpoint_thread_match(), bpstat_stop_status()];
add section argument to describe_other_breakpoints();
use INIT_SAL() macro to zero-out new sal structures;
make resolve_sal_pc() fix up the sal's section as well as its pc;
match on section + pc in clear_command() and delete_breakpoint();
account for overlay sections in insert_breakpoints(),
remove_breakpoint() and breakpoint_re_set_one();
all this to support overlays where a PC is not unique.
* exec.c: change xfer_memory() to handle overlay sections.
* findvar.c: change read_var_value() to handle overlay sections.
* frame.h: declaration for block_for_pc_sect() [blockframe.c].
* infcmd.c: jump_command() warns against jumping into an overlay
that's not in memory. Also use INIT_SAL() to initialize sals.
* infrun.c: wait_for_inferior() sets a flag to invalidate cached
overlay state information; Also use INIT_SAL() to init sals.
* m32r-rom.c: modify load routines to use LMA instead of VMA.
* m32r-stub.c: mask exit value down to 8 bits; screen out any
memory read/writes in the range 600000 to a00000, and ff680000
to ff800000 (hangs because nothing is mapped there); fix strcpy().
* maint.c: maintenance command "translate-address" supports overlays.
* minsyms.c: lookup_minimal_symbol_by_pc_sect() supports overlays.
* objfiles.[ch]: add ovly_mapped field to the obj_section struct;
this constitutes gdb's internal overlay mapping table. Add macro
ALL_OBJSECTIONS() to loop thru the obj_structs and look at overlays.
Add function find_pc_sect_section().
* printcmd.c: modify print_address_symbolic() with overlay smarts;
modify address_info() with overlay smarts; add function sym_info()
to support the INFO SYMBOL command (translate address to symbol(s));
modify disassemble_command() to work on unmapped overlays.
* source.c: use INIT_SAL() to initialize sals.
* symfile.[ch]: change generic_load() to use section's LMA address
instead of VMA address, for overlay sections.
Add numerous functions for finding a PC's section / overlay,
translating between VMA and LMA address ranges, determining if an
overlay section is mapped, etc. Add several user commands for
overlay debugging. Add support for a "generic" form of automatically
reading overlay mapping info from the inferior (based on the default
(simple) overlay manager which Cygnus provides as an example).
* symtab.[ch]: add functions find_pc_sect_symtab(),
find_pc_sect_psymtab(), find_pc_sect_psymbol(), find_pc_sect_line()
for lookup; modify lookup_symbol and decode_line_1() to use them;
modify find_function_start_sal() to account for overlay sections;
add macro INIT_SAL() for initializing struct symtab_and_line.
* target.c: fix a comment in the declaration of target_ops.
Diffstat (limited to 'gdb/maint.c')
-rw-r--r-- | gdb/maint.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/gdb/maint.c b/gdb/maint.c index 28dde76..2bec634 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -294,7 +294,11 @@ maintenance_translate_address (arg, from_tty) CORE_ADDR address; asection *sect; char *p; - struct symbol *sym; + struct minimal_symbol *sym; + struct objfile *objfile; + + if (arg == NULL || *arg == 0) + error ("requires argument (address or section + address)"); sect = NULL; p = arg; @@ -308,17 +312,31 @@ maintenance_translate_address (arg, from_tty) *p++ = '\000'; while (isspace (*p)) p++; /* Skip whitespace */ - sect = bfd_get_section_by_name (exec_bfd, arg); + ALL_OBJFILES (objfile) + if (sect = bfd_get_section_by_name (objfile->obfd, arg)) + break; + if (!sect) error ("Unknown section %s.", arg); } address = parse_and_eval_address (p); - return; -/* sym = find_pc_function_section (address, sect);*/ + if (sect) + sym = lookup_minimal_symbol_by_pc_section (address, sect); + else + sym = lookup_minimal_symbol_by_pc (address); + + if (sym) + printf_filtered ("%s+%u\n", + SYMBOL_SOURCE_NAME (sym), + address - SYMBOL_VALUE_ADDRESS (sym)); + else if (sect) + printf_filtered ("no symbol at %s:0x%08x\n", sect->name, address); + else + printf_filtered ("no symbol at 0x%08x\n", address); - printf_unfiltered ("%s+%u\n", SYMBOL_SOURCE_NAME (sym), address - SYMBOL_VALUE_ADDRESS (sym)); + return; } #endif /* MAINTENANCE_CMDS */ |