diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-04-28 12:42:05 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-04-28 12:42:18 -0700 |
commit | 1670f9c1546818c4ffe02e8f460df1c1c4b1601d (patch) | |
tree | 7d60c13655d170ddd4aa72e83c37b6dc3e360f3e /ld | |
parent | d6f48aed23d1004a4ed8ab3b2742b0bf7c838c1c (diff) | |
download | gdb-1670f9c1546818c4ffe02e8f460df1c1c4b1601d.zip gdb-1670f9c1546818c4ffe02e8f460df1c1c4b1601d.tar.gz gdb-1670f9c1546818c4ffe02e8f460df1c1c4b1601d.tar.bz2 |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 11 | ||||
-rw-r--r-- | ld/testsuite/config/default.exp | 37 | ||||
-rw-r--r-- | ld/testsuite/ld-i386/tls.exp | 58 | ||||
-rw-r--r-- | ld/testsuite/ld-i386/tlsdesc1a.c | 19 | ||||
-rw-r--r-- | ld/testsuite/ld-i386/tlsdesc1b.c | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/tls.exp | 63 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/tlsdesc1a.c | 19 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/tlsdesc1b.c | 8 |
8 files changed, 223 insertions, 0 deletions
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; +} |