From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 42036 invoked by alias); 28 Apr 2017 19:44:37 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 41553 invoked by uid 89); 28 Apr 2017 19:44:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,NO_DNS_FOR_FROM,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=CC, 17661, yyy X-HELO: mga03.intel.com Received: from mga03.intel.com (HELO mga03.intel.com) (134.134.136.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 28 Apr 2017 19:44:34 +0000 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Apr 2017 12:44:35 -0700 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([172.25.70.218]) by orsmga002.jf.intel.com with ESMTP; 28 Apr 2017 12:44:34 -0700 Received: by gnu-6.sc.intel.com (Postfix, from userid 1000) id 20ED7200152; Fri, 28 Apr 2017 12:44:35 -0700 (PDT) Date: Fri, 28 Apr 2017 19:44:00 -0000 From: "H.J. Lu" To: binutils@sourceware.org Subject: [committed, PATCH] x86: Add run-time tests for -mtls-dialect=gnu2 Message-ID: <20170428194435.GA3964@intel.com> Reply-To: "H.J. Lu" MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.8.0 (2017-02-23) X-SW-Source: 2017-04/txt/msg00278.txt.bz2 I checked in this patch to add run-time tests for -mtls-dialect=gnu2. H.J. --- * 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. --- 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(+) create mode 100644 ld/testsuite/ld-i386/tlsdesc1a.c create mode 100644 ld/testsuite/ld-i386/tlsdesc1b.c create mode 100644 ld/testsuite/ld-x86-64/tlsdesc1a.c create mode 100644 ld/testsuite/ld-x86-64/tlsdesc1b.c 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 + * 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 + * 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 +#include + +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 +#include + +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; +} -- 2.9.3