[gdb] Make maint info sections print relocated addresses
When running gdb.base/compare-sections.exp with -fPIE/-pie, we get: ... print /u *(unsigned char *) 0x00000238^M Cannot access memory at address 0x238^M (gdb) FAIL: gdb.base/compare-sections.exp: read-only: get value of read-only section ... The problem is that that "maint info sections" prints an unrelocated address: ... [0] 0x00000238->0x00000254 at 0x00000238: .interp ALLOC LOAD READONLY \ DATA HAS_CONTENTS ... while the test expects a relocated address. Given that the documentation states that the command displays "the section information displayed by info files", and that info files shows relocated addresses: ... 0x0000555555554238 - 0x0000555555554254 is .interp ... fix this by showing relocated addresses for maint info sections as well. Build and tested on x86_64-linux. gdb/ChangeLog: 2019-08-16 Tom de Vries <tdevries@suse.de> * maint.c (maintenance_info_sections): Also handle !ALLOBJ case using print_objfile_section_info.
This commit is contained in:
parent
3df505f60e
commit
6eac171f06
|
@ -1,3 +1,8 @@
|
|||
2019-08-16 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* maint.c (maintenance_info_sections): Also handle !ALLOBJ case using
|
||||
print_objfile_section_info.
|
||||
|
||||
2019-08-15 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* tui/tui-io.c (tui_puts_internal): Check TUI_CMD_WIN before
|
||||
|
|
39
gdb/maint.c
39
gdb/maint.c
|
@ -329,33 +329,36 @@ maintenance_info_sections (const char *arg, int from_tty)
|
|||
{
|
||||
if (exec_bfd)
|
||||
{
|
||||
struct obj_section *osect;
|
||||
bool allobj = false;
|
||||
|
||||
printf_filtered (_("Exec file:\n"));
|
||||
printf_filtered (" `%s', ", bfd_get_filename (exec_bfd));
|
||||
wrap_here (" ");
|
||||
printf_filtered (_("file type %s.\n"), bfd_get_target (exec_bfd));
|
||||
if (arg && *arg && match_substring (arg, "ALLOBJ"))
|
||||
|
||||
/* Only this function cares about the 'ALLOBJ' argument;
|
||||
if 'ALLOBJ' is the only argument, discard it rather than
|
||||
passing it down to print_objfile_section_info (which
|
||||
wouldn't know how to handle it). */
|
||||
if (arg && strcmp (arg, "ALLOBJ") == 0)
|
||||
{
|
||||
struct obj_section *osect;
|
||||
arg = NULL;
|
||||
allobj = true;
|
||||
}
|
||||
|
||||
/* Only this function cares about the 'ALLOBJ' argument;
|
||||
if 'ALLOBJ' is the only argument, discard it rather than
|
||||
passing it down to print_objfile_section_info (which
|
||||
wouldn't know how to handle it). */
|
||||
if (strcmp (arg, "ALLOBJ") == 0)
|
||||
arg = NULL;
|
||||
|
||||
for (objfile *ofile : current_program_space->objfiles ())
|
||||
for (objfile *ofile : current_program_space->objfiles ())
|
||||
{
|
||||
if (allobj)
|
||||
printf_filtered (_(" Object file: %s\n"),
|
||||
bfd_get_filename (ofile->obfd));
|
||||
ALL_OBJFILE_OSECTIONS (ofile, osect)
|
||||
{
|
||||
printf_filtered (_(" Object file: %s\n"),
|
||||
bfd_get_filename (ofile->obfd));
|
||||
ALL_OBJFILE_OSECTIONS (ofile, osect)
|
||||
{
|
||||
print_objfile_section_info (ofile->obfd, osect, arg);
|
||||
}
|
||||
if (!allobj && ofile->obfd != exec_bfd)
|
||||
continue;
|
||||
print_objfile_section_info (ofile->obfd, osect, arg);
|
||||
}
|
||||
}
|
||||
else
|
||||
bfd_map_over_sections (exec_bfd, print_bfd_section_info, (void *) arg);
|
||||
}
|
||||
|
||||
if (core_bfd)
|
||||
|
|
Loading…
Reference in New Issue