From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108588 invoked by alias); 17 Jan 2019 16:49:15 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 108347 invoked by uid 89); 17 Jan 2019 16:49:02 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=Enb, enb, git113, sk:fno-sta X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com Received: from mail-eopbgr30087.outbound.protection.outlook.com (HELO EUR03-AM5-obe.outbound.protection.outlook.com) (40.107.3.87) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 17 Jan 2019 16:48:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2t5Vvn4QLr1z6hexdymYjGvDFSgeuO3vMSX8Gs/1arU=; b=nPJ4mQAZ3VJVK+YU2hsyKbcuQxZitGZUFTtEK3wORNdcmhSjyiu3xX5yq/O+60+YTJM1Qlw81dEXqD6JxJevOVPhc+LzOSe/nSPuclgXDX6GmoKTCYR1uxjhOq6dc3YHEsOaTEcxVuhlxiNzHTPej3JoQklLL1e4BNrbtYE//ws= Received: from AM4PR0802MB2129.eurprd08.prod.outlook.com (10.172.216.148) by AM4PR0802MB2225.eurprd08.prod.outlook.com (10.172.217.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1537.26; Thu, 17 Jan 2019 16:48:56 +0000 Received: from AM4PR0802MB2129.eurprd08.prod.outlook.com ([fe80::5d0e:5d40:2f35:2aa3]) by AM4PR0802MB2129.eurprd08.prod.outlook.com ([fe80::5d0e:5d40:2f35:2aa3%9]) with mapi id 15.20.1537.018; Thu, 17 Jan 2019 16:48:55 +0000 From: Alan Hayward To: "gdb-patches@sourceware.org" CC: nd Subject: [Ping] [PATCH] Testsuite: Ensure stack protection is off for GCC Date: Thu, 17 Jan 2019 16:49:00 -0000 Message-ID: References: <20190107163715.5591-1-alan.hayward@arm.com> In-Reply-To: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Alan.Hayward@arm.com; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) Content-Type: text/plain; charset="us-ascii" Content-ID: <7239DEDA01B05D43B6074A2A0F8EF71E@eurprd08.prod.outlook.com> Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-IsSubscribed: yes X-SW-Source: 2019-01/txt/msg00406.txt.bz2 Ping. Note there is a fix patch for GCC under review here: https://gcc.gnu.org/ml/gcc-patches/2019-01/msg00543.html Once it is in an upstream GCC release, I can expand the GDB change to only disable stack protection on older GCCs. Alan. > On 7 Jan 2019, at 16:57, Alan Hayward wrote: >=20 > Forgot to mention: this fixes ~60 tests when running make check on Ubuntu. >=20 >=20 >> On 7 Jan 2019, at 16:37, Alan Hayward wrote: >>=20 >> Using -fstack-protector-strong will cause GDB to break on the wrong line >> when placing a breakpoint on a function. This is caused by due to >> inadequate dwarf line numbering, and is being tracked by the GCC bug >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D88432 >>=20 >> GCC (and Clang) provided by Debian/Ubuntu default to Stack Protector >> being enabled. >>=20 >> So, ensure that when running the GDB testsuite, stack protector is always >> turned off for GCC (option has existed since GCC 4.1.0). >>=20 >> Also, ensure that this does not cause infinite recursion due to >> test_compiler_info having to compile a file itself. >>=20 >> Restore change in ovldbreak.exp which worked around the issue. >>=20 >> [Side note - this fix would be improved by checking for Ubuntu/Debian, >> but I don't see any existing checks for that in the testsuite] >>=20 >> 2019-01-07 Alan Hayward >>=20 >> * gdb.cp/ovldbreak.exp: Only allow a single break line. >> * lib/gdb.exp (get_compiler_info): Use getting_compiler_info option. >> (gdb_compile): Remove stack protector for GCC and prevent recursion. >> --- >> gdb/testsuite/gdb.cp/ovldbreak.exp | 2 +- >> gdb/testsuite/lib/gdb.exp | 17 +++++++++++++++-- >> 2 files changed, 16 insertions(+), 3 deletions(-) >>=20 >> diff --git a/gdb/testsuite/gdb.cp/ovldbreak.exp b/gdb/testsuite/gdb.cp/o= vldbreak.exp >> index 494f2a12e9..3ffd04209a 100644 >> --- a/gdb/testsuite/gdb.cp/ovldbreak.exp >> +++ b/gdb/testsuite/gdb.cp/ovldbreak.exp >> @@ -209,7 +209,7 @@ for {set idx 0} {$idx < [llength $overloads]} {incr = idx} { >>=20 >> # Verify the breakpoints. >> set bptable "Num\[\t \]+Type\[\t \]+Disp Enb Address\[\t \]+What.*\[\r\n= ]+" >> -append bptable "\[0-9\]+\[\t \]+breakpoint\[\t \]+keep\[\t \]y\[\t \]+$= hex\[\t \]+in main(\\((|void)\\))? at.*$srcfile:4\[89\]\[\r\n\]+" >> +append bptable "\[0-9\]+\[\t \]+breakpoint\[\t \]+keep\[\t \]y\[\t \]+$= hex\[\t \]+in main(\\((|void)\\))? at.*$srcfile:49\[\r\n\]+" >> append bptable "\[\t \]+breakpoint already hit 1 time\[\r\n\]+." >> foreach ovld $overloads { >> append bptable [format "\[0-9\]+\[\t \]+breakpoint\[\t \]+keep y\[\t = \]+$hex\[\t \]+in foo::overload1arg\\(%s\\) at.*$srcfile:%d\[\r\n\]+" $ovld= \ >> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp >> index ed9f89d5a7..7443638a72 100644 >> --- a/gdb/testsuite/lib/gdb.exp >> +++ b/gdb/testsuite/lib/gdb.exp >> @@ -3276,12 +3276,12 @@ proc get_compiler_info {{arg ""}} { >> # We have to use -E and -o together, despite the comments >> # above, because of how DejaGnu handles remote host testing. >> set ppout "$outdir/compiler.i" >> - gdb_compile "${ifile}" "$ppout" preprocess [list "$arg" quiet] >> + gdb_compile "${ifile}" "$ppout" preprocess [list "$arg" quiet getting_= compiler_info] >> set file [open $ppout r] >> set cppout [read $file] >> close $file >> } else { >> - set cppout [ gdb_compile "${ifile}" "" preprocess [list "$arg" quiet] ] >> + set cppout [ gdb_compile "${ifile}" "" preprocess [list "$arg" quiet g= etting_compiler_info] ] >> } >> eval log_file $saved_log >>=20 >> @@ -3519,6 +3519,7 @@ proc gdb_compile {source dest type options} { >> } >> set shlib_found 0 >> set shlib_load 0 >> + set getting_compiler_info 0 >> foreach opt $options { >> if {[regexp {^shlib=3D(.*)} $opt dummy_var shlib_name] >> && $type =3D=3D "executable"} { >> @@ -3549,11 +3550,23 @@ proc gdb_compile {source dest type options} { >> } >> } elseif { $opt =3D=3D "shlib_load" && $type =3D=3D "executable" } { >> set shlib_load 1 >> + } elseif { $opt =3D=3D "getting_compiler_info" } { >> + # If this is set, calling test_compiler_info will cause recursion. >> + set getting_compiler_info 1 >> } else { >> lappend new_options $opt >> } >> } >>=20 >> + # Ensure stack protector is disabled for GCC, as this will causes p= roblems >> + # with DWARF line numbering. >> + # See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D88432 >> + # This option defaults to on for Debian/Ubuntu. >> + if { $getting_compiler_info =3D=3D 0 && [test_compiler_info "gcc-*"= ] } { >> + # Put it at the front to not override any user-provided value >> + lappend new_options "early_flags=3D-fno-stack-protector" >> + } >> + >> # Because we link with libraries using their basename, we may need >> # (depending on the platform) to set a special rpath value, to allow >> # the executable to find the libraries it depends on. >> --=20 >> 2.17.2 (Apple Git-113) >>=20 >=20