|
@@ -0,0 +1,65 @@
|
|
|
+--- src/readelf.c
|
|
|
++++ src/readelf.c
|
|
|
+@@ -4773,10 +4773,11 @@ listptr_base (struct listptr *p)
|
|
|
+ return cudie_base (&cu);
|
|
|
+ }
|
|
|
+
|
|
|
++static const char *listptr_name;
|
|
|
++
|
|
|
+ static int
|
|
|
+-compare_listptr (const void *a, const void *b, void *arg)
|
|
|
++compare_listptr (const void *a, const void *b)
|
|
|
+ {
|
|
|
+- const char *name = arg;
|
|
|
+ struct listptr *p1 = (void *) a;
|
|
|
+ struct listptr *p2 = (void *) b;
|
|
|
+
|
|
|
+@@ -4792,21 +4793,21 @@ compare_listptr (const void *a, const void *b, void *arg)
|
|
|
+ p1->warned = p2->warned = true;
|
|
|
+ error (0, 0,
|
|
|
+ gettext ("%s %#" PRIx64 " used with different address sizes"),
|
|
|
+- name, (uint64_t) p1->offset);
|
|
|
++ listptr_name, (uint64_t) p1->offset);
|
|
|
+ }
|
|
|
+ if (p1->dwarf64 != p2->dwarf64)
|
|
|
+ {
|
|
|
+ p1->warned = p2->warned = true;
|
|
|
+ error (0, 0,
|
|
|
+ gettext ("%s %#" PRIx64 " used with different offset sizes"),
|
|
|
+- name, (uint64_t) p1->offset);
|
|
|
++ listptr_name, (uint64_t) p1->offset);
|
|
|
+ }
|
|
|
+ if (listptr_base (p1) != listptr_base (p2))
|
|
|
+ {
|
|
|
+ p1->warned = p2->warned = true;
|
|
|
+ error (0, 0,
|
|
|
+ gettext ("%s %#" PRIx64 " used with different base addresses"),
|
|
|
+- name, (uint64_t) p1->offset);
|
|
|
++ listptr_name, (uint64_t) p1->offset);
|
|
|
+ }
|
|
|
+ if (p1->attr != p2 ->attr)
|
|
|
+ {
|
|
|
+@@ -4814,7 +4815,7 @@ compare_listptr (const void *a, const void *b, void *arg)
|
|
|
+ error (0, 0,
|
|
|
+ gettext ("%s %#" PRIx64
|
|
|
+ " used with different attribute %s and %s"),
|
|
|
+- name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
|
|
|
++ listptr_name, (uint64_t) p1->offset, dwarf_attr_name (p2->attr),
|
|
|
+ dwarf_attr_name (p2->attr));
|
|
|
+ }
|
|
|
+ }
|
|
|
+@@ -4885,9 +4886,11 @@ notice_listptr (enum section_e section, struct listptr_table *table,
|
|
|
+ static void
|
|
|
+ sort_listptr (struct listptr_table *table, const char *name)
|
|
|
+ {
|
|
|
+- if (table->n > 0)
|
|
|
+- qsort_r (table->table, table->n, sizeof table->table[0],
|
|
|
+- &compare_listptr, (void *) name);
|
|
|
++ if (table->n > 0) {
|
|
|
++ listptr_name = name;
|
|
|
++ qsort (table->table, table->n, sizeof table->table[0],
|
|
|
++ &compare_listptr);
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ static bool
|