2008-11-18 Paul Pluzhnikov <ppluzhnikov@google.com>

* objfiles.h: New MULTI_OBJFILE_P macro.
	* printcmd.c (sym_info): Print object name.
	* maint.c (maintenance_translate_address): Likewise.
This commit is contained in:
Paul Pluzhnikov 2008-11-18 21:31:27 +00:00
parent 00a0b122cf
commit c14c28ba11
8 changed files with 104 additions and 16 deletions

View File

@ -1,3 +1,9 @@
2008-11-18 Paul Pluzhnikov <ppluzhnikov@google.com>
* objfiles.h: New MULTI_OBJFILE_P macro.
* printcmd.c (sym_info): Print object name.
* maint.c (maintenance_translate_address): Likewise.
2008-11-18 Joel Brobecker <brobecker@adacore.com>
* NEWS: Document the removal of "catch load" and "catch unload".

View File

@ -1,3 +1,9 @@
2008-11-18 Paul Pluzhnikov <ppluzhnikov@google.com>
* gdb.texinfo (Symbols): Mention printing containing
image name in "info symbol".
(Maint translate-address): Likewise.
2008-11-18 Joel Brobecker <brobecker@adacore.com>
* gdb.texinfo (Set Catchpoints): Remove the documentation of

View File

@ -11856,6 +11856,16 @@ _initialize_vx + 396 in section .text
This is the opposite of the @code{info address} command. You can use
it to find out the name of a variable or a function given its address.
For dynamically linked executables, the name of executable or shared
library containing the symbol is also printed:
@smallexample
(@value{GDBP}) info symbol 0x400225
_start + 5 in section .text of /tmp/a.out
(@value{GDBP}) info symbol 0x2aaaac2811cf
__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
@end smallexample
@kindex whatis
@item whatis [@var{arg}]
Print the data type of @var{arg}, which can be either an expression or
@ -24611,6 +24621,10 @@ the symbol's location to the specified address. This is similar to
the @code{info address} command (@pxref{Symbols}), except that this
command also allows to find symbols in other sections.
If section was not specified, the section in which the symbol was found
is also printed. For dynamically linked executables, the name of
executable or shared library containing the symbol is printed as well.
@end table
The following command is useful for non-interactive invocations of

View File

@ -35,6 +35,7 @@
#include "symfile.h"
#include "objfiles.h"
#include "value.h"
#include "gdb_assert.h"
#include "cli/cli-decode.h"
@ -484,9 +485,32 @@ maintenance_translate_address (char *arg, int from_tty)
sym = lookup_minimal_symbol_by_pc (address);
if (sym)
printf_filtered ("%s+%s\n",
SYMBOL_PRINT_NAME (sym),
pulongest (address - SYMBOL_VALUE_ADDRESS (sym)));
{
const char *symbol_name = SYMBOL_PRINT_NAME (sym);
const char *symbol_offset = pulongest (address - SYMBOL_VALUE_ADDRESS (sym));
sect = SYMBOL_OBJ_SECTION(sym);
if (sect != NULL)
{
const char *section_name;
const char *obj_name;
gdb_assert (sect->the_bfd_section && sect->the_bfd_section->name);
section_name = sect->the_bfd_section->name;
gdb_assert (sect->objfile && sect->objfile->name);
obj_name = sect->objfile->name;
if (MULTI_OBJFILE_P ())
printf_filtered (_("%s + %s in section %s of %s\n"),
symbol_name, symbol_offset, section_name, obj_name);
else
printf_filtered (_("%s + %s in section %s\n"),
symbol_name, symbol_offset, section_name);
}
else
printf_filtered (_("%s + %s\n"), symbol_name, symbol_offset);
}
else if (sect)
printf_filtered (_("no symbol at %s:0x%s\n"),
sect->the_bfd_section->name, paddr (address));

View File

@ -583,4 +583,8 @@ extern void *objfile_data (struct objfile *objfile,
uninitialized section index. */
#define SECT_OFF_BSS(objfile) (objfile)->sect_index_bss
/* Answer whether there is more than one object file loaded. */
#define MULTI_OBJFILE_P() (object_files && object_files->next)
#endif /* !defined (OBJFILES_H) */

View File

@ -1012,21 +1012,51 @@ sym_info (char *arg, int from_tty)
&& sect_addr < obj_section_endaddr (osect)
&& (msymbol = lookup_minimal_symbol_by_pc_section (sect_addr, osect)))
{
const char *obj_name, *mapped, *sec_name, *msym_name;
matches = 1;
offset = sect_addr - SYMBOL_VALUE_ADDRESS (msymbol);
if (offset)
printf_filtered ("%s + %u in ",
SYMBOL_PRINT_NAME (msymbol), offset);
mapped = section_is_mapped (osect) ? _("mapped") : _("unmapped");
sec_name = osect->the_bfd_section->name;
msym_name = SYMBOL_PRINT_NAME (msymbol);
gdb_assert (osect->objfile && osect->objfile->name);
obj_name = osect->objfile->name;
if (MULTI_OBJFILE_P ())
if (pc_in_unmapped_range (addr, osect))
if (section_is_overlay (osect))
printf_filtered (_("%s + %u in load address range of "
"%s overlay section %s of %s\n"),
msym_name, offset,
mapped, sec_name, obj_name);
else
printf_filtered (_("%s + %u in load address range of "
"section %s of %s\n"),
msym_name, offset, sec_name, obj_name);
else
if (section_is_overlay (osect))
printf_filtered (_("%s + %u in %s overlay section %s of %s\n"),
msym_name, offset, mapped, sec_name, obj_name);
else
printf_filtered (_("%s + %u in section %s of %s\n"),
msym_name, offset, sec_name, obj_name);
else
printf_filtered ("%s in ",
SYMBOL_PRINT_NAME (msymbol));
if (pc_in_unmapped_range (addr, osect))
printf_filtered (_("load address range of "));
if (section_is_overlay (osect))
printf_filtered (_("%s overlay "),
section_is_mapped (osect) ? "mapped" : "unmapped");
printf_filtered (_("section %s"), osect->the_bfd_section->name);
printf_filtered ("\n");
if (pc_in_unmapped_range (addr, osect))
if (section_is_overlay (osect))
printf_filtered (_("%s + %u in load address range of %s overlay "
"section %s\n"),
msym_name, offset, mapped, sec_name);
else
printf_filtered (_("%s + %u in load address range of section %s\n"),
msym_name, offset, sec_name);
else
if (section_is_overlay (osect))
printf_filtered (_("%s + %u in %s overlay section %s\n"),
msym_name, offset, mapped, sec_name);
else
printf_filtered (_("%s + %u in section %s\n"),
msym_name, offset, sec_name);
}
}
if (matches == 0)

View File

@ -1,3 +1,7 @@
2008-11-18 Paul Pluzhnikov <ppluzhnikov@google.com>
* gdb.base/sepsymtab.exp: Update for new 'info sym' format.
2008-11-17 Doug Evans <dje@google.com>
* gdb.mi/mi-syn-frame.exp: Update expected output.

View File

@ -45,7 +45,7 @@ gdb_load ${binfile}
set command "info sym main"
set command_regex [string_to_regexp $command]
gdb_test_multiple "$command" "$command" {
-re "^${command_regex}\[\r\n\]+main in section \[^\r\n\]+\[\r\n\]+$gdb_prompt \$" {
-re "^${command_regex}\[\r\n\]+main \\+ 0 in section \[^\r\n\]+\[\r\n\]+$gdb_prompt \$" {
pass "$command"
}
}