aboutsummaryrefslogtreecommitdiff
path: root/gdb/maint.c
diff options
context:
space:
mode:
authorMichael Snyder <msnyder@vmware.com>1997-04-03 23:19:46 +0000
committerMichael Snyder <msnyder@vmware.com>1997-04-03 23:19:46 +0000
commitb9580b812cd50f88b9bd63603bec6aeeedf75cdf (patch)
treeb0adb52d66af883de4d25f86a1d58037bdefe609 /gdb/maint.c
parent4eb4b87e13548a3cdf14f779d52dd51f50bff5e6 (diff)
downloadgdb-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.c28
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 */