From 24841daa74f092f7c5639ee8f1fb303c7694dee7 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 22 Feb 2019 10:36:24 +0000 Subject: Extend readelf and objdump so that they will display and follow multiple links to separate debug information files. PR 23843 * dwarf.h (struct separate_info): New structure for containing information on separate debug info files. * dwarf.c (struct dwo_info): New structure for containing dwo links. (first_dwo_info): Chain of dwo_info structures. (first_separate_file): Chain of separate_info structures. (separate_debug_file, separate_debug_filename): Delete. (fetch_alt_indirect_string): Scan all separate debug info files for the requested string. (add_dwo_info): New function. (add_dwo_name): New function. (add_dwo_dir): New function. (add_dwo_id: New function. (free_dwo_info): New function. (read_and_display_attr_value): Store DWO data using the new functions. (load_debug_section_with_follow): If necessary, scan the list of separate debug info files for the requested section. (add_separate_debug_file): New function. (load_separate_debug_info): Call add_separate_debug_file to store the information on the newly loaded file. (load_dwo_file): Likewise. (load_separate_debif_file): Rename to load_separate_debug_files. Change return type to boolean. If following links then attempt to load all separate debug info files, not just the first one. (free_debug_memory): Release memory in dwo_info and separate_info chains. * objdump.c (dump_dwarf): Iterate over all loaded debg info files. * readelf.c (process_object): Likewise. * doc/debug.options.texi: Update descriptions of links and follow-links options. * testsuite/binutils-all/objdump.WK2: Update expected output. * testsuite/binutils-all/readelf.k2: Likewise. * NEWS: Announce the new feature. --- binutils/dwarf.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'binutils/dwarf.h') diff --git a/binutils/dwarf.h b/binutils/dwarf.h index 0895f33..a0287fc 100644 --- a/binutils/dwarf.h +++ b/binutils/dwarf.h @@ -187,6 +187,15 @@ typedef struct } debug_info; +typedef struct separate_info +{ + void * handle; /* The pointer returned by open_debug_file(). */ + const char * filename; + struct separate_info * next; +} separate_info; + +extern separate_info * first_separate_info; + extern unsigned int eh_addr_size; extern int do_debug_info; @@ -225,7 +234,7 @@ extern void init_dwarf_regnames_riscv (void); extern bfd_boolean load_debug_section (enum dwarf_section_display_enum, void *); extern void free_debug_section (enum dwarf_section_display_enum); -extern void * load_separate_debug_file (void *, const char *); +extern bfd_boolean load_separate_debug_files (void *, const char *); extern void close_debug_file (void *); extern void * open_debug_file (const char *); -- cgit v1.1