summaryrefslogtreecommitdiff
path: root/binutils-absolute-gnu_debuglink-path.patch
blob: f4d314473193be71aa90ffc0e82b1068c5da4cde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--- binutils-2.18.50.0.2/bfd/opncls.c.orig	2007-10-03 17:52:57.000000000 +0200
+++ binutils-2.18.50.0.2/bfd/opncls.c	2007-10-22 22:30:03.233754376 +0200
@@ -1241,6 +1241,10 @@
       return NULL;
     }
 
+  /* PLD: check the possible absolute debuginfo path (e.g. /tmp/.../usr/lib/debug/... */
+  if (separate_debug_file_exists (basename, crc32))
+    return basename;
+
   for (dirlen = strlen (abfd->filename); dirlen > 0; dirlen--)
     if (IS_DIR_SEPARATOR (abfd->filename[dirlen - 1]))
       break;
@@ -1345,6 +1349,15 @@
   return find_separate_debug_file (abfd, dir);
 }
 
+static char const*
+relaxed_filename (char const* filename)
+{
+  char const* relaxed = strstr (filename, "/usr/lib/debug/");
+  if ( relaxed != NULL )
+    return relaxed;
+  return filename;
+}
+
 /*
 FUNCTION
 	bfd_create_gnu_debuglink_section
@@ -1376,8 +1389,7 @@
       return NULL;
     }
 
-  /* Strip off any path components in filename.  */
-  filename = lbasename (filename);
+  filename = relaxed_filename (filename);
 
   sect = bfd_get_section_by_name (abfd, GNU_DEBUGLINK);
   if (sect)
@@ -1463,9 +1475,7 @@
     crc32 = bfd_calc_gnu_debuglink_crc32 (crc32, buffer, count);
   fclose (handle);
 
-  /* Strip off any path components in filename,
-     now that we no longer need them.  */
-  filename = lbasename (filename);
+  filename = relaxed_filename (filename);
 
   filelen = strlen (filename);
   debuglink_size = filelen + 1;