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.
This commit is contained in:
Nick Clifton
2019-02-22 10:36:24 +00:00
parent 83f43c8344
commit 24841daa74
9 changed files with 381 additions and 187 deletions

View File

@ -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 *);