[2/2] libctf, ld: fix test results for upstream GCC

Message ID 20210505125423.486087-2-nick.alcock@oracle.com
State New
Headers show
Series
  • [1/2] libctf, include: support an alternative encoding for nonrepresentable types
Related show

Commit Message

H.J. Lu via Binutils May 5, 2021, 12:54 p.m.
The tests currently in binutils are aimed at the original GCC, which
emitted CTF directly from GCC's internal representation.  The approach
now under review emits CTF from DWARF, with an eye to eventually doing
this for all non-DWARF debuginfo-like formats GCC supports.  It also
uses a different flag to enable CTF emission (-gctf rather than -gt).

Adjust the testsuite accordingly.

Given that the ld testsuite results are dependent on type ordering,
which we do not guarantee at all, it's amazing how little changes. We
see a few type ordering differences, slices change because the old GCC
was buggy (slices were emitted "backwards", from the wrong end of the
machine word) and its expected results were wrong, and GCC now emits the
underlying integral type for enumerated types, though CTF has no way to
record this yet (coming in v4).

GCC also now emits even hidden symbols into the symtab (and thus
symtypetab), so one symtypetab test changes its expected results
slightly to compensate.

Also add tests for the CTF_K_UNKNOWN nonrepresentable type: this
couldn't be done before now since the only GCC that emits CTF_K_UNKNOWN
for nonrepresentable types is the new one.

ld/ChangeLog
2021-05-05  Nick Alcock  <nick.alcock@oracle.com>

	* testsuite/ld-ctf/ctf.exp: Use -gctf, not -gt.
	* testsuite/lib/ld-lib.exp: Likewise.
	* testsuite/ld-ctf/nonrepresentable-1.c: New test for nonrepresentable types.
	* testsuite/ld-ctf/nonrepresentable-2.c: Likewise.
	* testsuite/ld-ctf/nonrepresentable.d: Likewise.
	* testsuite/ld-ctf/array.d: Larger type section.
	* testsuite/ld-ctf/data-func-conflicted.d: Likewise.
	* testsuite/ld-ctf/enums.d: Likewise.
	* testsuite/ld-ctf/conflicting-enums.d: Don't compare types.
	* testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Changed type order.
	* testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise.
	* testsuite/ld-ctf/slice.d: Adjust for improved slice emission.

libctf/ChangeLog
2021-05-05  Nick Alcock  <nick.alcock@oracle.com>

	* testsuite/lib/ctf-lib.exp: Use -gctf, not -gt.
	* testsuite/libctf-regression/nonstatic-var-section-ld-r.lk:
	Hidden symbols now get into the symtypetab anyway.
---
 ld/testsuite/ld-ctf/array.d                   |  2 +-
 ld/testsuite/ld-ctf/conflicting-enums.d       |  2 +-
 .../ld-ctf/cross-tu-cyclic-conflicting.d      |  4 +--
 ld/testsuite/ld-ctf/cross-tu-noncyclic.d      |  6 ++---
 ld/testsuite/ld-ctf/ctf.exp                   |  2 +-
 ld/testsuite/ld-ctf/data-func-conflicted.d    |  2 +-
 ld/testsuite/ld-ctf/enums.d                   |  8 +++---
 ld/testsuite/ld-ctf/nonrepresentable-1.c      |  7 +++++
 ld/testsuite/ld-ctf/nonrepresentable-2.c      | 11 ++++++++
 ld/testsuite/ld-ctf/nonrepresentable.d        | 26 +++++++++++++++++++
 ld/testsuite/ld-ctf/slice.d                   | 11 ++++----
 ld/testsuite/lib/ld-lib.exp                   |  4 +--
 libctf/testsuite/lib/ctf-lib.exp              |  4 +--
 .../nonstatic-var-section-ld-r.lk             |  1 -
 14 files changed, 68 insertions(+), 22 deletions(-)
 create mode 100644 ld/testsuite/ld-ctf/nonrepresentable-1.c
 create mode 100644 ld/testsuite/ld-ctf/nonrepresentable-2.c
 create mode 100644 ld/testsuite/ld-ctf/nonrepresentable.d

Tested on all the usual platforms (x86_64-pc-linux-gnu, aarch64-unknown-linux-gnu, 
x86_64-unknown-freebsd13.0, sparc64-unknown-linux-gnu) with both the old (GCC 10-based)
and new compilers, except that the new compiler is currently not bootstrapping on Cygwin
or mingw for me so those two were skipped there (but this binutils was still tested with
the old GCC-10-based compiler anyway).

-- 
2.31.0.253.gdec51257f3

Patch

diff --git a/ld/testsuite/ld-ctf/array.d b/ld/testsuite/ld-ctf/array.d
index ab262d915b5..142f9e9fa94 100644
--- a/ld/testsuite/ld-ctf/array.d
+++ b/ld/testsuite/ld-ctf/array.d
@@ -14,7 +14,7 @@  Contents of CTF section .ctf:
     Version: 4 \(CTF_VERSION_3\)
 #...
     Data object section:	.* \(0x[1-9a-f][0-9a-f]* bytes\)
-    Type section:	.* \(0x5c bytes\)
+    Type section:	.* \(0x6c bytes\)
     String section:	.*
 
   Labels:
diff --git a/ld/testsuite/ld-ctf/conflicting-enums.d b/ld/testsuite/ld-ctf/conflicting-enums.d
index f90aaef44b1..5eeae7a13ed 100644
--- a/ld/testsuite/ld-ctf/conflicting-enums.d
+++ b/ld/testsuite/ld-ctf/conflicting-enums.d
@@ -14,7 +14,7 @@  Contents of CTF section .ctf:
     Version: 4 \(CTF_VERSION_3\)
 #...
   Types:
-
+#...
   Strings:
 #...
 CTF archive member: .*enum.*\.c:
diff --git a/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d b/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d
index eaf8e79c8ad..6d5e869bfbe 100644
--- a/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d
+++ b/ld/testsuite/ld-ctf/cross-tu-cyclic-conflicting.d
@@ -13,12 +13,12 @@  Contents of CTF section \.ctf:
 
 #...
   Types:
-#...
-    0x[0-9a-f]*: \(kind 1\) long int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
 #...
     0x[0-9a-f]*: \(kind 6\) struct B .*
 #...
     0x[0-9a-f]*: \(kind 1\) int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+#...
+    0x[0-9a-f]*: \(kind 1\) long int \(format 0x1\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
 #...
     0x[0-9a-f]*: \(kind 9\) struct A
 #...
diff --git a/ld/testsuite/ld-ctf/cross-tu-noncyclic.d b/ld/testsuite/ld-ctf/cross-tu-noncyclic.d
index e8fc7a49aa5..3ebc52dcb3b 100644
--- a/ld/testsuite/ld-ctf/cross-tu-noncyclic.d
+++ b/ld/testsuite/ld-ctf/cross-tu-noncyclic.d
@@ -28,13 +28,13 @@  Contents of CTF section .ctf:
 #...
 
   Types:
+#...
+    0x[0-9a-f]*: \(kind 6\) struct B .*
+       *\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int .*
 #...
     0x[0-9a-f]*: \(kind 6\) struct A .*
        *\[0x0\] a: ID 0x[0-9a-f]*: \(kind 1\) long int .*
        *\[0x[0-9a-f]*\] foo: ID 0x[0-9a-f]*: \(kind 3\) struct B \* .*
-#...
-    0x[0-9a-f]*: \(kind 6\) struct B .*
-       *\[0x0\] foo: ID 0x[0-9a-f]*: \(kind 1\) int .*
 #...
     0x[0-9a-f]*: \(kind 3\) struct B \* \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 6\) struct B .*
 #...
diff --git a/ld/testsuite/ld-ctf/ctf.exp b/ld/testsuite/ld-ctf/ctf.exp
index c5f6d5cec5b..0e74d6c569c 100644
--- a/ld/testsuite/ld-ctf/ctf.exp
+++ b/ld/testsuite/ld-ctf/ctf.exp
@@ -42,7 +42,7 @@  foreach ctf_test $ctf_test_list {
 	}
     }
     verbose [file rootname $ctf_test]
-    run_dump_test [file rootname $ctf_test] { { cc "-gt -fPIC" } }
+    run_dump_test [file rootname $ctf_test] { { cc "-gctf -fPIC" } }
 }
 
 if {[info exists old_lc_all]} {
diff --git a/ld/testsuite/ld-ctf/data-func-conflicted.d b/ld/testsuite/ld-ctf/data-func-conflicted.d
index 87dd4b61e3b..f4f4fdd0e48 100644
--- a/ld/testsuite/ld-ctf/data-func-conflicted.d
+++ b/ld/testsuite/ld-ctf/data-func-conflicted.d
@@ -16,7 +16,7 @@  Contents of CTF section \.ctf:
     Data object section:	.* \(0x[1-9a-f][0-9a-f]* bytes\)
     Function info section:	.* \(0x[1-9a-f][0-9a-f]* bytes\)
     Object index section:	.* \(0xc bytes\)
-    Type section:	.* \(0xf4 bytes\)
+    Type section:	.* \(0x118 bytes\)
     String section:	.*
 #...
   Data objects:
diff --git a/ld/testsuite/ld-ctf/enums.d b/ld/testsuite/ld-ctf/enums.d
index f1cf70de5af..d36c7e19f7f 100644
--- a/ld/testsuite/ld-ctf/enums.d
+++ b/ld/testsuite/ld-ctf/enums.d
@@ -14,7 +14,7 @@  Contents of CTF section .ctf:
 #...
     Compilation unit name: .*enums.c
 #...
-    Type section:	.*\(0x114 bytes\)
+    Type section:	.*\(0x134 bytes\)
 #...
   Types:
     0x1: \(kind 8\) enum nine_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
@@ -27,7 +27,8 @@  Contents of CTF section .ctf:
          NINE_SEVEN: 260
          NINE_EIGHT: 261
          NINE_NINE: 262
-    0x2: \(kind 8\) enum ten_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+    0x2: \(kind 1\) .*int \(format 0x[01]\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]\)
+    0x3: \(kind 8\) enum ten_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
          TEN_ONE: 10
          TEN_TWO: 11
          TEN_THREE: -256
@@ -38,7 +39,8 @@  Contents of CTF section .ctf:
          TEN_EIGHT: -251
          TEN_NINE: -250
          TEN_TEN: -249
-    0x3: \(kind 8\) enum eleven_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+    0x4: \(kind 1\) .*int \(format 0x[01]\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
+    0x5: \(kind 8\) enum eleven_els \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
          ELEVEN_ONE: 10
          ELEVEN_TWO: 11
          ELEVEN_THREE: -256
diff --git a/ld/testsuite/ld-ctf/nonrepresentable-1.c b/ld/testsuite/ld-ctf/nonrepresentable-1.c
new file mode 100644
index 00000000000..3135347a5ab
--- /dev/null
+++ b/ld/testsuite/ld-ctf/nonrepresentable-1.c
@@ -0,0 +1,7 @@ 
+#include <complex.h>
+
+int foo (complex int a)
+{
+  return 3;
+}
+
diff --git a/ld/testsuite/ld-ctf/nonrepresentable-2.c b/ld/testsuite/ld-ctf/nonrepresentable-2.c
new file mode 100644
index 00000000000..c008c1148f9
--- /dev/null
+++ b/ld/testsuite/ld-ctf/nonrepresentable-2.c
@@ -0,0 +1,11 @@ 
+#include <complex.h>
+
+extern int foo (complex int);
+
+int main (void)
+{
+  complex int a = 33.4;
+  foo (a);
+
+  return 1;
+}
diff --git a/ld/testsuite/ld-ctf/nonrepresentable.d b/ld/testsuite/ld-ctf/nonrepresentable.d
new file mode 100644
index 00000000000..8461b54dead
--- /dev/null
+++ b/ld/testsuite/ld-ctf/nonrepresentable.d
@@ -0,0 +1,26 @@ 
+#as:
+#source: nonrepresentable-1.c
+#source: nonrepresentable-2.c
+#objdump: --ctf=.ctf
+#ld: -shared
+#name: Nonrepresentable types
+
+.*: +file format .*
+
+Contents of CTF section .ctf:
+
+  Header:
+    Magic number: 0xdff2
+    Version: 4 \(CTF_VERSION_3\)
+#...
+  Function objects:
+#...
+    foo -> 0x[0-9]*: \(kind 5\) int \(\*\) \(\(nonrepresentable type.*\)\) \(aligned at 0x8\)
+#...
+  Types:
+#...
+    0x[0-9a-f]*: \(kind 0\) \(nonrepresentable type.*\)
+#...
+
+  Strings:
+#...
diff --git a/ld/testsuite/ld-ctf/slice.d b/ld/testsuite/ld-ctf/slice.d
index efe32a87523..8973dcf05e1 100644
--- a/ld/testsuite/ld-ctf/slice.d
+++ b/ld/testsuite/ld-ctf/slice.d
@@ -15,7 +15,7 @@  Contents of CTF section .ctf:
     Compilation unit name: .*slice.c
 #...
     Data object section:	.* \(0x[1-9a-f][0-9a-f]* bytes\)
-    Type section:	.* \(0xd0 bytes\)
+    Type section:	.* \(0xe0 bytes\)
     String section:	.*
 #...
   Data objects:
@@ -25,8 +25,9 @@  Contents of CTF section .ctf:
 #...
     0x[0-9a-f]*: \(kind 6\) struct slices \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\)
         *\[0x0\] one: ID 0x[0-9a-f]*: \(kind 1\) int:1 \[slice 0x0:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
-        *\[0x1\] two: ID 0x[0-9a-f]*: \(kind 1\) int:2 \[slice 0x1:0x2\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
-        *\[0x3\] six: ID 0x[0-9a-f]*: \(kind 1\) int:6 \[slice 0x3:0x6\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
-        *\[0x9\] ten: ID 0x[0-9a-f]*: \(kind 1\) int:10 \[slice 0x9:0xa\] \(format 0x1\) \(size 0x2\) \(aligned at 0x2\)
-        *\[0x13\] bar: ID 0x[0-9a-f]*: \(kind 8\) enum foo:1 \[slice 0x13:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
+        *\[0x1\] two: ID 0x[0-9a-f]*: \(kind 1\) int:2 \[slice 0x0:0x2\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
+        *\[0x3\] six: ID 0x[0-9a-f]*: \(kind 1\) int:6 \[slice 0x0:0x6\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
+        *\[0x9\] ten: ID 0x[0-9a-f]*: \(kind 1\) int:10 \[slice 0x0:0xa\] \(format 0x1\) \(size 0x2\) \(aligned at 0x2\)
+        *\[0x13\] bar: ID 0x[0-9a-f]*: \(kind 8\) enum foo:1 \[slice 0x0:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
+
 #...
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index a56c945f9b1..b1080889a8e 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -1625,7 +1625,7 @@  proc compile_one_cc { src output additional_flags } {
     return [run_host_cmd_yesno "$CC" "$flags $CFLAGS $additional_flags $src -o $output"]
 }
 
-# Returns true if the target compiler supports -gt
+# Returns true if the target compiler supports -gctf
 proc check_ctf_available { } {
     global ctf_available_saved
 
@@ -1639,7 +1639,7 @@  proc check_ctf_available { } {
 	    set f [open $src "w"]
 	    puts $f "int main() { return 0; }"
 	    close $f
-	    set ctf_available_saved [compile_one_cc $src $output "-gt -c"]
+	    set ctf_available_saved [compile_one_cc $src $output "-gctf -c"]
 	    remote_file host delete $src
 	    remote_file host delete $output
 	    file delete $src
diff --git a/libctf/testsuite/lib/ctf-lib.exp b/libctf/testsuite/lib/ctf-lib.exp
index 2f1742c8755..0fb095829c6 100644
--- a/libctf/testsuite/lib/ctf-lib.exp
+++ b/libctf/testsuite/lib/ctf-lib.exp
@@ -197,10 +197,10 @@  proc run_lookup_test { name } {
 	set lookup_flags ""
 	if { $run_ld } {
 	    set lookup_output "tmpdir/out.so"
-	    set lookup_flags "-gt -fPIC $shared $opts(link_flags)"
+	    set lookup_flags "-gctf -fPIC $shared $opts(link_flags)"
 	} else {
 	    set lookup_output "tmpdir/out.o"
-	    set lookup_flags "-gt -fPIC -c"
+	    set lookup_flags "-gctf -fPIC -c"
 	}
 	if [board_info [target_info name] exists cflags] {
 	    append lookup_flags " [board_info [target_info name] cflags]"
diff --git a/libctf/testsuite/libctf-regression/nonstatic-var-section-ld-r.lk b/libctf/testsuite/libctf-regression/nonstatic-var-section-ld-r.lk
index 68c777fef66..7e31a37557c 100644
--- a/libctf/testsuite/libctf-regression/nonstatic-var-section-ld-r.lk
+++ b/libctf/testsuite/libctf-regression/nonstatic-var-section-ld-r.lk
@@ -4,4 +4,3 @@ 
 # link_flags: -Wl,--ctf-variables -r
 foo is of type [0-9a-f]*
 bar is of type [0-9a-f]*
-foo missing from the data object section