diff options
author | Nick Clifton <nickc@redhat.com> | 2019-02-25 12:15:41 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2019-02-25 12:15:41 +0000 |
commit | 39f0547e554df96608dd041d2a7b3c72882fd515 (patch) | |
tree | 53ca1f928e75345d1a9e3a409ef95ef9a2175304 /binutils/dwarf.c | |
parent | 60245a92ce2c16d0b43987c2442b1a125652b832 (diff) | |
download | gdb-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.c | 9 |
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 |