110 lines
3.4 KiB
Diff
110 lines
3.4 KiB
Diff
--- 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;
|
|
|