You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.4 KiB
109 lines
3.4 KiB
--- binutils.orig/binutils/dwarf.c 2020-10-15 12:13:21.960799738 +0100 |
|
+++ binutils-2.35.1/binutils/dwarf.c 2020-10-15 13:02:39.454692627 +0100 |
|
@@ -10427,7 +10427,7 @@ load_separate_debug_info (const char * |
|
{ |
|
warn (_("Corrupt debuglink section: %s\n"), |
|
xlink->name ? xlink->name : xlink->uncompressed_name); |
|
- return FALSE; |
|
+ return NULL; |
|
} |
|
|
|
/* Attempt to locate the separate file. |
|
@@ -10587,7 +10587,7 @@ load_separate_debug_info (const char * |
|
{ |
|
warn (_("failed to open separate debug file: %s\n"), debug_filename); |
|
free (debug_filename); |
|
- return FALSE; |
|
+ return NULL; |
|
} |
|
|
|
/* FIXME: We do not check to see if there are any other separate debug info |
|
@@ -10632,6 +10632,52 @@ load_dwo_file (const char * main_filenam |
|
return separate_handle; |
|
} |
|
|
|
+/* Load a debuglink section and/or a debugaltlink section, if either are present. |
|
+ Recursively check the loaded files for more of these sections. |
|
+ FIXME: Should also check for DWO_* entries in the newlu loaded files. */ |
|
+ |
|
+static void |
|
+check_for_and_load_links (void * file, const char * filename) |
|
+{ |
|
+ void * handle = NULL; |
|
+ |
|
+ if (load_debug_section (gnu_debugaltlink, file)) |
|
+ { |
|
+ Build_id_data build_id_data; |
|
+ |
|
+ handle = load_separate_debug_info (filename, |
|
+ & debug_displays[gnu_debugaltlink].section, |
|
+ parse_gnu_debugaltlink, |
|
+ check_gnu_debugaltlink, |
|
+ & build_id_data, |
|
+ file); |
|
+ if (handle) |
|
+ { |
|
+ assert (handle == first_separate_info->handle); |
|
+ check_for_and_load_links (first_separate_info->handle, |
|
+ first_separate_info->filename); |
|
+ } |
|
+ } |
|
+ |
|
+ if (load_debug_section (gnu_debuglink, file)) |
|
+ { |
|
+ unsigned long crc32; |
|
+ |
|
+ handle = load_separate_debug_info (filename, |
|
+ & debug_displays[gnu_debuglink].section, |
|
+ parse_gnu_debuglink, |
|
+ check_gnu_debuglink, |
|
+ & crc32, |
|
+ file); |
|
+ if (handle) |
|
+ { |
|
+ assert (handle == first_separate_info->handle); |
|
+ check_for_and_load_links (first_separate_info->handle, |
|
+ first_separate_info->filename); |
|
+ } |
|
+ } |
|
+} |
|
+ |
|
/* Load the separate debug info file(s) attached to FILE, if any exist. |
|
Returns TRUE if any were found, FALSE otherwise. |
|
If TRUE is returned then the linked list starting at first_separate_info |
|
@@ -10707,34 +10753,10 @@ load_separate_debug_files (void * file, |
|
return FALSE; |
|
|
|
/* FIXME: We do not check for the presence of both link sections in the same file. */ |
|
- /* FIXME: We do not check the separate debug info file to see if it too contains debuglinks. */ |
|
/* FIXME: We do not check for the presence of multiple, same-name debuglink sections. */ |
|
/* FIXME: We do not check for the presence of a dwo link as well as a debuglink. */ |
|
|
|
- if (load_debug_section (gnu_debugaltlink, file)) |
|
- { |
|
- Build_id_data * build_id_data; |
|
- |
|
- load_separate_debug_info (filename, |
|
- & debug_displays[gnu_debugaltlink].section, |
|
- parse_gnu_debugaltlink, |
|
- check_gnu_debugaltlink, |
|
- & build_id_data, |
|
- file); |
|
- } |
|
- |
|
- if (load_debug_section (gnu_debuglink, file)) |
|
- { |
|
- unsigned long crc32; |
|
- |
|
- load_separate_debug_info (filename, |
|
- & debug_displays[gnu_debuglink].section, |
|
- parse_gnu_debuglink, |
|
- check_gnu_debuglink, |
|
- & crc32, |
|
- file); |
|
- } |
|
- |
|
+ check_for_and_load_links (file, filename); |
|
if (first_separate_info != NULL) |
|
return TRUE; |
|
|
|
|