This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] x86: Add run-time tests for -mtls-dialect=gnu2


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1670f9c1546818c4ffe02e8f460df1c1c4b1601d

commit 1670f9c1546818c4ffe02e8f460df1c1c4b1601d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Fri Apr 28 12:42:05 2017 -0700

    x86: Add run-time tests for -mtls-dialect=gnu2
    
    	* testsuite/config/default.exp (GNU2_CFLAGS): New.  Set
    	to -mtls-dialect=gnu2 if target compiler supports it.
    	* testsuite/ld-i386/tls.exp: Run -mtls-dialect=gnu2 tests.
    	* testsuite/ld-x86-64/tls.exp: Likewise.
    	* testsuite/ld-i386/tlsdesc1a.c: New file.
    	* testsuite/ld-i386/tlsdesc1b.c: Likewise.
    	* testsuite/ld-x86-64/tlsdesc1a.c: Likewise.
    	* testsuite/ld-x86-64/tlsdesc1b.c: Likewise.

Diff:
---
 ld/ChangeLog                       | 11 +++++++
 ld/testsuite/config/default.exp    | 37 ++++++++++++++++++++++
 ld/testsuite/ld-i386/tls.exp       | 58 +++++++++++++++++++++++++++++++++++
 ld/testsuite/ld-i386/tlsdesc1a.c   | 19 ++++++++++++
 ld/testsuite/ld-i386/tlsdesc1b.c   |  8 +++++
 ld/testsuite/ld-x86-64/tls.exp     | 63 ++++++++++++++++++++++++++++++++++++++
 ld/testsuite/ld-x86-64/tlsdesc1a.c | 19 ++++++++++++
 ld/testsuite/ld-x86-64/tlsdesc1b.c |  8 +++++
 8 files changed, 223 insertions(+)

diff --git a/ld/ChangeLog b/ld/ChangeLog
index be412ed..e15ee0a 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,16 @@
 2017-04-28  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* testsuite/config/default.exp (GNU2_CFLAGS): New.  Set
+	to -mtls-dialect=gnu2 if target compiler supports it.
+	* testsuite/ld-i386/tls.exp: Run -mtls-dialect=gnu2 tests.
+	* testsuite/ld-x86-64/tls.exp: Likewise.
+	* testsuite/ld-i386/tlsdesc1a.c: New file.
+	* testsuite/ld-i386/tlsdesc1b.c: Likewise.
+	* testsuite/ld-x86-64/tlsdesc1a.c: Likewise.
+	* testsuite/ld-x86-64/tlsdesc1b.c: Likewise.
+
+2017-04-28  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* testsuite/ld-elf/shared.exp: Add run-time tests for -z now.
 	* testsuite/ld-i386/tls.exp: Likewise.
 	* testsuite/ld-ifunc/ifunc.exp: Likewise.
diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp
index 899943c..f5cb188 100644
--- a/ld/testsuite/config/default.exp
+++ b/ld/testsuite/config/default.exp
@@ -328,3 +328,40 @@ if { ![info exists NOPIE_CFLAGS] || ![info exists NOPIE_LDFLAGS] } then {
 	set NOPIE_LDFLAGS ""
     }
 }
+
+# Set GNU2_CFLAGS to "-mtls-dialect=gnu2" if target compiler supports it.
+
+if { ![info exists GNU2_CFLAGS] } then {
+    if { [which $CC] != 0 } {
+	# Check if gcc supports -mtls-dialect=gnu2
+	set flags ""
+	if [board_info [target_info name] exists cflags] {
+	    append flags " [board_info [target_info name] cflags]"
+	}
+	if [board_info [target_info name] exists ldflags] {
+	    append flags " [board_info [target_info name] ldflags]"
+	}
+
+	set basename "tmpdir/gnu2[pid]"
+	set src ${basename}.c
+	set output ${basename}.o
+	set f [open $src "w"]
+	puts $f "__thread int yyy = 100;"
+	close $f
+	if [is_remote host] {
+	    set src [remote_download host $src]
+	}
+	set gnu2_available [run_host_cmd_yesno "$CC" "$flags -c -mtls-dialect=gnu2 $src -o $output"]
+	remote_file host delete $src
+	remote_file host delete $output
+	file delete $src
+
+	if { $gnu2_available == 1 } then {
+	    set GNU2_CFLAGS "-mtls-dialect=gnu2"
+	} else {
+	    set GNU2_CFLAGS ""
+	}
+    } else {
+	set GNU2_CFLAGS ""
+    }
+}
diff --git a/ld/testsuite/ld-i386/tls.exp b/ld/testsuite/ld-i386/tls.exp
index 4430821..504b0f6 100644
--- a/ld/testsuite/ld-i386/tls.exp
+++ b/ld/testsuite/ld-i386/tls.exp
@@ -176,3 +176,61 @@ run_ld_link_exec_tests [list \
 	"pass.out" \
     ] \
 ]
+
+run_cc_link_tests [list \
+    [list \
+	"Build libtlsdesc1.so" \
+	"-shared" \
+	"-fPIC $GNU2_CFLAGS" \
+	{ tlsdesc1b.c } \
+	{} \
+	"libtlsdesc1.so" \
+    ] \
+    [list \
+	"Build libtlsdesc1n.so" \
+	"-Wl,-z,now -shared" \
+	"-fPIC $GNU2_CFLAGS" \
+	{ tlsdesc1b.c } \
+	{} \
+	"libtlsdesc1n.so" \
+    ] \
+]
+
+run_ld_link_exec_tests [list \
+    [list \
+	"Run tlsdesc1" \
+	"-Wl,--no-as-needed tmpdir/libtlsdesc1.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1a" \
+	"pass.out" \
+	"$GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 (-z now)" \
+	"-Wl,-z,now -Wl,--no-as-needed tmpdir/libtlsdesc1n.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1b" \
+	"pass.out" \
+	"$GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 with PIE" \
+	"-pie -Wl,--no-as-needed tmpdir/libtlsdesc1.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1c" \
+	"pass.out" \
+	"-fPIE $GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 with PIE (-z now)" \
+	"-pie -Wl,-z,now -Wl,--no-as-needed tmpdir/libtlsdesc1n.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1d" \
+	"pass.out" \
+	"-fPIE $GNU2_CFLAGS" \
+    ] \
+]
diff --git a/ld/testsuite/ld-i386/tlsdesc1a.c b/ld/testsuite/ld-i386/tlsdesc1a.c
new file mode 100644
index 0000000..7d2f4f6
--- /dev/null
+++ b/ld/testsuite/ld-i386/tlsdesc1a.c
@@ -0,0 +1,19 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+extern int foo (void);
+
+extern __thread int yyy;
+
+__thread int zzz = 20;
+
+int
+main (void)
+{
+  if (foo () != zzz)
+    abort ();
+  if (yyy != 100)
+    abort ();
+  printf ("PASS\n");
+  return 0;
+}
diff --git a/ld/testsuite/ld-i386/tlsdesc1b.c b/ld/testsuite/ld-i386/tlsdesc1b.c
new file mode 100644
index 0000000..fe428af
--- /dev/null
+++ b/ld/testsuite/ld-i386/tlsdesc1b.c
@@ -0,0 +1,8 @@
+__thread int yyy = 100;
+extern __thread int zzz;
+
+int
+foo (void)
+{
+  return zzz;
+}
diff --git a/ld/testsuite/ld-x86-64/tls.exp b/ld/testsuite/ld-x86-64/tls.exp
index e578645..6b4852b 100644
--- a/ld/testsuite/ld-x86-64/tls.exp
+++ b/ld/testsuite/ld-x86-64/tls.exp
@@ -176,3 +176,66 @@ run_ld_link_exec_tests [list \
 	"pass.out" \
     ] \
 ]
+
+# -mtls-dialect=gnu2 isn't supported on x32.
+if [istarget "x86_64-*-linux*-gnux32"] {
+    return
+}
+
+run_cc_link_tests [list \
+    [list \
+	"Build libtlsdesc1.so" \
+	"-shared" \
+	"-fPIC $GNU2_CFLAGS" \
+	{ tlsdesc1b.c } \
+	{} \
+	"libtlsdesc1.so" \
+    ] \
+    [list \
+	"Build libtlsdesc1n.so" \
+	"-Wl,-z,now -shared" \
+	"-fPIC $GNU2_CFLAGS" \
+	{ tlsdesc1b.c } \
+	{} \
+	"libtlsdesc1n.so" \
+    ] \
+]
+
+run_ld_link_exec_tests [list \
+    [list \
+	"Run tlsdesc1" \
+	"-Wl,--no-as-needed tmpdir/libtlsdesc1.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1a" \
+	"pass.out" \
+	"$GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 (-z now)" \
+	"-Wl,-z,now -Wl,--no-as-needed tmpdir/libtlsdesc1n.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1b" \
+	"pass.out" \
+	"$GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 with PIE" \
+	"-pie -Wl,--no-as-needed tmpdir/libtlsdesc1.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1c" \
+	"pass.out" \
+	"-fPIE $GNU2_CFLAGS" \
+    ] \
+    [list \
+	"Run tlsdesc1 with PIE (-z now)" \
+	"-pie -Wl,-z,now -Wl,--no-as-needed tmpdir/libtlsdesc1n.so" \
+	"" \
+	{ tlsdesc1a.c } \
+	"tlsdesc1d" \
+	"pass.out" \
+	"-fPIE $GNU2_CFLAGS" \
+    ] \
+]
diff --git a/ld/testsuite/ld-x86-64/tlsdesc1a.c b/ld/testsuite/ld-x86-64/tlsdesc1a.c
new file mode 100644
index 0000000..7d2f4f6
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/tlsdesc1a.c
@@ -0,0 +1,19 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+extern int foo (void);
+
+extern __thread int yyy;
+
+__thread int zzz = 20;
+
+int
+main (void)
+{
+  if (foo () != zzz)
+    abort ();
+  if (yyy != 100)
+    abort ();
+  printf ("PASS\n");
+  return 0;
+}
diff --git a/ld/testsuite/ld-x86-64/tlsdesc1b.c b/ld/testsuite/ld-x86-64/tlsdesc1b.c
new file mode 100644
index 0000000..fe428af
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/tlsdesc1b.c
@@ -0,0 +1,8 @@
+__thread int yyy = 100;
+extern __thread int zzz;
+
+int
+foo (void)
+{
+  return zzz;
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]