]> sourceware.org Git - glibc.git/commitdiff
nptl_db: Re-use the ELF-to-abilist converter for ABI checking
authorFlorian Weimer <fweimer@redhat.com>
Tue, 29 Jun 2021 20:17:05 +0000 (22:17 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 29 Jun 2021 20:17:08 +0000 (22:17 +0200)
The previous approach uses readelf -DWs, which does not produce
a stable output format (older binutils versions do not include
symbol version information).  This commit re-uses scripts/abilist.awk
with a tweak to include GLIBC_PRIVATE symbols.  This awk script
is based on objdump -T output, which appears to be stable over time.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
nptl_db/Makefile
nptl_db/db-symbols.awk
scripts/abilist.awk

index c04aa6140acff337148206d9a678ec1ca7774566..8ad4f90e84754a112b43754744f57ee511452eca 100644 (file)
@@ -54,8 +54,13 @@ tests-special += $(objpfx)db-symbols.out
 include ../Rules
 
 $(objpfx)db-symbols.out: $(objpfx)db-symbols.v.i \
-                        $(common-objpfx)libc.so
-       LC_ALL=C $(READELF) -W -D -s $(filter %.so,$^) | $(AWK) -f $< > $@; \
+                        $(objpfx)libc.symlist-private
+       LC_ALL=C $(AWK) -f $^ > $@; \
        $(evaluate-test)
 
 $(objpfx)db-symbols.v.i: db-symbols.awk
+
+$(objpfx)libc.symlist-private: $(..)scripts/abilist.awk \
+  $(common-objpfx)libc.dynsym
+       LC_ALL=C $(AWK) -v include_private=1 -f $^ > $@T
+       mv -f $@T $@
index fe90d3b4357aba6dc24d53683355aa42017f563c..67034c3e89168b75f06ac6f3eb1ab04e234d4b44 100644 (file)
@@ -1,5 +1,5 @@
-# This script processes the output of 'readelf -W -D -s' on the libc.so
-# we've just built.  It checks for all the symbols used in td_symbol_list.
+# This script processes the libc.so abilist (with GLIBC_PRIVATE
+# symbols included).  It checks for all the symbols used in td_symbol_list.
 
 BEGIN {
 %define DB_MAIN_VARIABLE(name) /* Nothing. */
@@ -12,18 +12,14 @@ BEGIN {
    in_symtab = 0;
 }
 
-/Symbol table for image/ { in_symtab=1; next }
-NF == 0 { in_symtab=0; next }
-
-!in_symtab { next }
-
-NF >= 8 && $7 != "UND" { seen[$NF] = 1 }
+/^GLIBC_PRIVATE / {
+    seen[$2] = 1
+}
 
 END {
   status = 0;
 
   for (s in required) {
-    s = s "@@GLIBC_PRIVATE"
     if (s in seen) print s, "ok";
     else {
       status = 1;
@@ -33,7 +29,6 @@ END {
 
   any = "";
   for (s in th_unique) {
-    s = s "@@GLIBC_PRIVATE"
     if (s in seen) {
       any = s;
       break;
index a43400d5b4011ea718499627557167452f3ae0ca..24a34ccbed2a8a43d614e847ce09e0d2e43ef31d 100644 (file)
@@ -55,7 +55,7 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
   # caused STV_HIDDEN symbols to appear in .dynsym, though that is useless.
   if (NF > 7 && $7 == ".hidden") next;
 
-  if (version == "GLIBC_PRIVATE") next;
+  if (version == "GLIBC_PRIVATE" && !include_private) next;
 
   desc = "";
   if (type == "D" && ($4 == ".tbss" || $4 == ".tdata")) {
This page took 0.044978 seconds and 5 git commands to generate.