summary refs log tree commit diff
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@redhat.com>2018-11-20 17:06:30 -0500
committerCarlos O'Donell <carlos@redhat.com>2018-11-26 21:23:50 -0500
commitce035c6e909ad20ef2fe13c92eab4e69f6495b61 (patch)
tree961f6223de461e85f9f3c4204a539bdb54da9292
parent2bd0bfcc6857f1fde2bd9716dc103333ebaa6807 (diff)
downloadglibc-ce035c6e909ad20ef2fe13c92eab4e69f6495b61.tar.gz
glibc-ce035c6e909ad20ef2fe13c92eab4e69f6495b61.tar.xz
glibc-ce035c6e909ad20ef2fe13c92eab4e69f6495b61.zip
abilist.awk: Treat .tdata like .tbss and reject unknown combinations.
Mathieu Desnoyers ran into an issue with his rseq patch where he
was the first person to add weak thread-local data and this
resulted in an ABI list update with entries like this:
"GLIBC_2.29 w ? D .tdata 0000000000000020".

The weakness of the symbol has nothing to do with the DSOs ABI
and so we should not write anything about weak symbols here. The
.tdata entries should be treated exactly like .tbss entries and
the output should have been: "GLIBC_2.29 __rseq_abi T 0x20"

This change makes abilist.awk handle .tdata just like .tbss,
while at the same time adding an error case for the default, and
the unknown line cases.  We never want anyone to be able to add
such entries to any ABI list files and should see an immediate
error and consult with experts.

Tested by Mathieu Desnoyers <mathieu.desnoyers@efficios.com> with
the rseq patch set and 'make update-all-abi'.

Tested myself with 'make update-all-abi' on x86_64 with no
changes.

Signed-off-by: Carlos O'Donell <carlos@redhat.com>
-rw-r--r--ChangeLog5
-rw-r--r--scripts/abilist.awk14
2 files changed, 10 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index c4dae980a2..b5ed08254c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-26  Carlos O'Donell  <carlos@redhat.com>
+
+	* scripts/abilist.awk: Handle .tdata. Error for unknown combinations.
+	Error for unknown lines.
+
 2018-11-26  Joseph Myers  <joseph@codesourcery.com>
 
 	* scripts/build-many-glibcs.py (Context.fix_glibc_timestamps):
diff --git a/scripts/abilist.awk b/scripts/abilist.awk
index bad7c3807e..b40be91f82 100644
--- a/scripts/abilist.awk
+++ b/scripts/abilist.awk
@@ -39,7 +39,6 @@ $2 == "l" { next }
 
 # If the target uses ST_OTHER, it will be output before the symbol name.
 $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
-  weak = $2;
   type = $3;
   size = $5;
   sub(/^0*/, "", size);
@@ -55,7 +54,7 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
   if (version == "GLIBC_PRIVATE") next;
 
   desc = "";
-  if (type == "D" && $4 == ".tbss") {
+  if (type == "D" && ($4 == ".tbss" || $4 == ".tdata")) {
     type = "T";
   }
   else if (type == "D" && $4 == ".opd") {
@@ -90,14 +89,10 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
     size = "";
   }
   else {
-    desc = symbol " " version " " weak " ? " type " " $4 " " $5;
-  }
-  if (size == " 0x") {
-    desc = symbol " " version " " weak " ? " type " " $4 " " $5;
+    print "ERROR: Unable to handle this type of symbol."
+    exit 1
   }
 
-  # Disabled -- weakness should not matter to shared library ABIs any more.
-  #if (weak == "w") type = tolower(type);
   if (desc == "")
     desc = symbol " " type size;
 
@@ -113,7 +108,8 @@ $2 == "g" || $2 == "w" && (NF == 7 || NF == 8) {
 NF == 0 || /DYNAMIC SYMBOL TABLE/ || /file format/ { next }
 
 {
-  print "Don't grok this line:", $0
+  print "ERROR: Unable to interpret this line:", $0
+  exit 1
 }
 
 function emit(end) {