]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
dwarf_elf_begin: Add .gnu_debugaltlink to the sectiondata array
authorFlorian Weimer <fweimer@redhat.com>
Tue, 15 Apr 2014 12:04:19 +0000 (14:04 +0200)
committerMark Wielaard <mjw@redhat.com>
Thu, 24 Apr 2014 11:18:33 +0000 (13:18 +0200)
And use it if DWZ mode is enabled.

Signed-off-by: Florian Weimer <fweimer@redhat.com>
libdw/ChangeLog
libdw/dwarf_begin_elf.c
libdw/libdwP.h

index 1e2482d9acbecf443464637732c7b57d68005148..1d0274b67d4266efe8c02fd1ab8f472c01e170b4 100644 (file)
@@ -1,3 +1,11 @@
+2014-04-15  Florian Weimer  <fweimer@redhat.com>
+
+       * libdwP.h (enum IDX_gnu_debugaltlink): New.
+       * dwarf_begin_elf.c (dwarf_scnnames): Increase string size and add
+       .gnu_debugaltlink.
+       (check_section): Obtain .gnu_debugaltlink section from the
+       setiondata array.
+
 2014-04-11  Mark Wielaard  <mjw@redhat.com>
 
        * libdw.map (ELFUTILS_0.159): New. Add dwelf_elf_gnu_debuglink.
index 34ea373448780a7579934a594254fb9d3b3f3575..5f69c61c111c799c68412bdc81e962fa3d7a09eb 100644 (file)
@@ -54,7 +54,7 @@
 
 
 /* Section names.  */
-static const char dwarf_scnnames[IDX_last][17] =
+static const char dwarf_scnnames[IDX_last][18] =
 {
   [IDX_debug_info] = ".debug_info",
   [IDX_debug_types] = ".debug_types",
@@ -67,7 +67,8 @@ static const char dwarf_scnnames[IDX_last][17] =
   [IDX_debug_str] = ".debug_str",
   [IDX_debug_macinfo] = ".debug_macinfo",
   [IDX_debug_macro] = ".debug_macro",
-  [IDX_debug_ranges] = ".debug_ranges"
+  [IDX_debug_ranges] = ".debug_ranges",
+  [IDX_gnu_debugaltlink] = ".gnu_debugaltlink"
 };
 #define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof (dwarf_scnnames[0]))
 
@@ -223,22 +224,6 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp)
       return NULL;
     }
 
-#ifdef ENABLE_DWZ
-  /* For dwz multifile support, ignore if it looks wrong.  */
-  if (strcmp (scnname, ".gnu_debugaltlink") == 0)
-    {
-      Elf_Data *data = elf_getdata (scn, NULL);
-      if (data != NULL && data->d_size != 0)
-       {
-         const char *alt_name = data->d_buf;
-         const void *build_id = memchr (data->d_buf, '\0', data->d_size);
-         const int id_len = data->d_size - (build_id - data->d_buf + 1);
-         if (alt_name && build_id && id_len > 0)
-           return open_debugaltlink (result, alt_name, build_id + 1, id_len);
-       }
-    }
-#endif /* ENABLE_DWZ */
-
   /* Recognize the various sections.  Most names start with .debug_.  */
   size_t cnt;
   for (cnt = 0; cnt < ndwarf_scnnames; ++cnt)
@@ -334,6 +319,18 @@ check_section (Dwarf *result, GElf_Ehdr *ehdr, Elf_Scn *scn, bool inscngrp)
       }
 #endif
 
+#ifdef ENABLE_DWZ
+  Elf_Data *data = result->sectiondata[IDX_gnu_debugaltlink];
+  if (data != NULL && data->d_size != 0)
+    {
+      const char *alt_name = data->d_buf;
+      const void *build_id = memchr (data->d_buf, '\0', data->d_size);
+      const int id_len = data->d_size - (build_id - data->d_buf + 1);
+      if (alt_name && build_id && id_len > 0)
+       return open_debugaltlink (result, alt_name, build_id + 1, id_len);
+    }
+#endif /* ENABLE_DWZ */
+
   return result;
 }
 
index 4939200501011bdbcda3bac37023f1c3174657c7..a68845612b7dcec8880c67d6b5c70d9782f69493 100644 (file)
@@ -74,6 +74,7 @@ enum
     IDX_debug_macinfo,
     IDX_debug_macro,
     IDX_debug_ranges,
+    IDX_gnu_debugaltlink,
     IDX_last
   };