From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 126416 invoked by alias); 1 May 2017 18:06:27 -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 125693 invoked by uid 89); 1 May 2017 18:06:26 -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=2c X-HELO: mga09.intel.com Received: from mga09.intel.com (HELO mga09.intel.com) (134.134.136.24) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 01 May 2017 18:06:25 +0000 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 01 May 2017 11:06:26 -0700 X-ExtLoop1: 1 Received: from gnu-6.sc.intel.com ([172.25.70.218]) by orsmga003.jf.intel.com with ESMTP; 01 May 2017 11:06:25 -0700 Received: by gnu-6.sc.intel.com (Postfix, from userid 1000) id DAF4D2001B3; Mon, 1 May 2017 11:06:25 -0700 (PDT) Date: Mon, 01 May 2017 18:06:00 -0000 From: "H.J. Lu" To: binutils@sourceware.org Subject: Re: [committed, PATCH] x86: Add run-time tests for -mtls-dialect=gnu2 Message-ID: <20170501180625.GA24817@intel.com> Reply-To: "H.J. Lu" References: <20170428194435.GA3964@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170428194435.GA3964@intel.com> User-Agent: Mutt/1.8.0 (2017-02-23) X-SW-Source: 2017-05/txt/msg00004.txt.bz2 On Fri, Apr 28, 2017 at 12:44:35PM -0700, H.J. Lu wrote: > 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. I checked in this patch to check if GNU2 TLS really works before running GNU2 TLS tests. * testsuite/ld-i386/tls.exp: Run GNU2 TLS tests only if there is working GNU2 TLS support. * testsuite/ld-x86-64/tls.exp: Likewise. * testsuite/lib/ld-lib.exp (check_gnu2_tls_available): New proc. --- ld/ChangeLog | 7 +++++ ld/testsuite/ld-i386/tls.exp | 5 ++++ ld/testsuite/ld-x86-64/tls.exp | 5 ++++ ld/testsuite/lib/ld-lib.exp | 64 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+) diff --git a/ld/ChangeLog b/ld/ChangeLog index e15ee0a..238404d 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2017-05-01 H.J. Lu + + * testsuite/ld-i386/tls.exp: Run GNU2 TLS tests only if there + is working GNU2 TLS support. + * testsuite/ld-x86-64/tls.exp: Likewise. + * testsuite/lib/ld-lib.exp (check_gnu2_tls_available): New proc. + 2017-04-28 H.J. Lu * testsuite/config/default.exp (GNU2_CFLAGS): New. Set diff --git a/ld/testsuite/ld-i386/tls.exp b/ld/testsuite/ld-i386/tls.exp index 504b0f6..7a99e46 100644 --- a/ld/testsuite/ld-i386/tls.exp +++ b/ld/testsuite/ld-i386/tls.exp @@ -177,6 +177,11 @@ run_ld_link_exec_tests [list \ ] \ ] +# Run-time tests which require working GNU2 TLS support. +if { ![check_gnu2_tls_available] } { + return +} + run_cc_link_tests [list \ [list \ "Build libtlsdesc1.so" \ diff --git a/ld/testsuite/ld-x86-64/tls.exp b/ld/testsuite/ld-x86-64/tls.exp index 6b4852b..5282146 100644 --- a/ld/testsuite/ld-x86-64/tls.exp +++ b/ld/testsuite/ld-x86-64/tls.exp @@ -201,6 +201,11 @@ run_cc_link_tests [list \ ] \ ] +# Run-time tests which require working GNU2 TLS support. +if { ![check_gnu2_tls_available] } { + return +} + run_ld_link_exec_tests [list \ [list \ "Run tlsdesc1" \ diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index b60fcad..aecc700 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -2210,3 +2210,67 @@ proc check_libdl_available { } { } return $libdl_available_saved } + +# Returns true if GNU2 TLS works. + +proc check_gnu2_tls_available { } { + global gnu2_tls_available_saved + global CC + global GNU2_CFLAGS + + if {![info exists gnu2_tls_available_saved]} { + if { [which $CC] == 0 || "$GNU2_CFLAGS" == "" } { + set gnu2_tls_available_saved 0 + return 0 + } + # Check if GNU2 TLS works. + set flags "$GNU2_CFLAGS" + 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_tls[pid]" + set src1 ${basename}1.c + set output1 ${basename}.so + set f [open $src1 "w"] + puts $f "extern __thread int zzz;" + puts $f "int foo (void)" + puts $f "{" + puts $f " return zzz;" + puts $f "}" + close $f + if [is_remote host] { + set src1 [remote_download host $src1] + } + set src2 ${basename}2.c + set output2 ${basename}.exe + set f [open $src2 "w"] + puts $f "__thread int zzz = 20;" + puts $f "extern int foo (void);" + puts $f "int main (void)" + puts $f "{" + puts $f " if (foo () != 20) __builtin_abort ();" + puts $f " return 0; " + puts $f "}" + close $f + if [is_remote host] { + set src2 [remote_download host $src2] + } + set gnu2_tls_available_saved [run_host_cmd_yesno "$CC" "-fPIC -shared $flags $src1 -o $output1"] + if { $gnu2_tls_available_saved == 1 } { + set gnu2_tls_available_saved [run_host_cmd_yesno "$CC" "$flags $src2 $output1 -o $output2"] + if { $gnu2_tls_available_saved == 1 } { + set gnu2_tls_available_saved [run_host_cmd_yesno "$output2" ""] + } + } + remote_file host delete $src1 + remote_file host delete $output1 + remote_file host delete $src2 + remote_file host delete $output2 + file delete $src1 $src2 + } + return $gnu2_tls_available_saved +} -- 2.9.3