aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2019-02-25 12:15:41 +0000
committerNick Clifton <nickc@redhat.com>2019-02-25 12:15:41 +0000
commit39f0547e554df96608dd041d2a7b3c72882fd515 (patch)
tree53ca1f928e75345d1a9e3a409ef95ef9a2175304 /binutils/dwarf.c
parent60245a92ce2c16d0b43987c2442b1a125652b832 (diff)
downloadgdb-39f0547e554df96608dd041d2a7b3c72882fd515.zip
gdb-39f0547e554df96608dd041d2a7b3c72882fd515.tar.gz
gdb-39f0547e554df96608dd041d2a7b3c72882fd515.tar.bz2
Extend objdump's --dwarf=follow-links option so that separate debug info files will also be affected by other dump function, and symbol tables from separate debug info files will be used when disassembling the main file.
* objdump.c (sym_ok): New function. (find_symbol_for_address): Use new function. (disassemble_section): Compare sections by name, not pointer. (dump_dwarf): Move code to initialise byte_get pointer and iterate over separate debug files from here to ... (dump_bfd): ... here. Add parameter indicating that a separate debug info file is being dumped. For main file, pull in the symbol tables from all separate debug info files. (display_object): Update call to dump_bfd. * doc/binutils.texi: Document extened behaviour of the --dwarf=follow-links option. * NEWS: Mention this new feature. * testsuite/binutils-all/objdump.WK2: Update expected output. * testsuite/binutils-all/objdump.exp (test_follow_debuglink): Add options and dump file parameters. Add extra test. * testsuite/binutils-all/objdump.WK3: New file. * testsuite/binutils-all/readelf.exp: Change expected output for readelf -wKis test. * testsuite/binutils-all/readelf.wKis: New file.
Diffstat (limited to 'binutils/dwarf.c')
-rw-r--r--binutils/dwarf.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 07142af7..9f17af9 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -9826,6 +9826,7 @@ parse_gnu_debuglink (struct dwarf_section * section, void * data)
The CRC value is stored after the filename, aligned up to 4 bytes. */
name = (const char *) section->start;
+
crc_offset = strnlen (name, section->size) + 1;
crc_offset = (crc_offset + 3) & ~3;
if (crc_offset + 4 > section->size)
@@ -9981,6 +9982,11 @@ load_separate_debug_info (const char * main_filename,
sprintf (debug_filename, "%s/%s", EXTRA_DEBUG_ROOT1, separate_filename);
if (check_func (debug_filename, func_data))
goto found;
+
+ /* Try the first extra debug file root. */
+ sprintf (debug_filename, "%s/%s/%s", EXTRA_DEBUG_ROOT1, canon_dir, separate_filename);
+ if (check_func (debug_filename, func_data))
+ goto found;
#endif
#ifdef EXTRA_DEBUG_ROOT2
@@ -10010,6 +10016,9 @@ load_separate_debug_info (const char * main_filename,
#endif
#ifdef EXTRA_DEBUG_ROOT1
+ sprintf (debug_filename, "%s/%s/%s", EXTRA_DEBUG_ROOT1, canon_dir, separate_filename);
+ warn (_("tried: %s\n"), debug_filename);
+
sprintf (debug_filename, "%s/%s", EXTRA_DEBUG_ROOT1, separate_filename);
warn (_("tried: %s\n"), debug_filename);
#endif