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