From patchwork Thu Aug 8 10:15:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 34004 Received: (qmail 10436 invoked by alias); 8 Aug 2019 10:15:49 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 10141 invoked by uid 89); 8 Aug 2019 10:15:34 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mx1.suse.de Received: from mx2.suse.de (HELO mx1.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 08 Aug 2019 10:15:30 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 5BF7BAE05; Thu, 8 Aug 2019 10:15:18 +0000 (UTC) Subject: Re: [PATCH][gdb/testsuite] Fix ada tests with -fPIE/-pie From: Tom de Vries To: Tom Tromey Cc: gdb-patches@sourceware.org, Joel Brobecker References: <20190807110713.GA23000@delia> <87v9v96oul.fsf@tromey.com> <7eb7d7c6-7b32-846d-369f-9bd6a466850d@suse.de> Openpgp: preference=signencrypt Message-ID: Date: Thu, 8 Aug 2019 12:15:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <7eb7d7c6-7b32-846d-369f-9bd6a466850d@suse.de> X-IsSubscribed: yes On 07-08-19 17:27, Tom de Vries wrote: > On 07-08-19 16:18, Tom Tromey wrote: >>>>>>> "Tom" == Tom de Vries writes: >> >> Tom> When running the gdb testsuite with target board unix/-fPIE/-pie, the >> Tom> resulting ada executables are not PIE executables, because gnatmake doesn't >> Tom> recognize -pie, and consequently doesn't pass it to gnatlink. >> >> Tom> Fix this by replacing "-pie" with "-largs -pie -margs" for ada test-cases in >> Tom> gdb_default_target_compile, and doing the same for -no-pie. >> >> I think this is a good idea overall. >> >> However, is gdb_default_target_compile still used? And if so, by what >> path? > > I'm using dejagnu 1.6.1, and that one does not have find_go_linker. So, > use_gdb_compile is set to 1 and we get: > ... > if {$use_gdb_compile} { > catch {rename default_target_compile {}} > rename gdb_default_target_compile default_target_compile > } > ... > >> My understanding is that with a "new enough" dejagnu, it won't be >> used -- so some users might still see the old behavior. >> > > AFAIU, yes. Hmm, that's not good. > >> Basically gdb_default_target_compile is all a big monkeypatching hack > > /me reads https://en.wikipedia.org/wiki/Monkey_patch > >> and it would be way better to have some kind of more principled approach >> upstream. > > Agreed. > >> I don't know what that would look like. And of course to get >> there we'd probably need even more monkeypatching. > > The following uses the approach taken in lib/cell.exp. > > Is this any better? > Updated rationale and ChangeLog entry. OK for trunk? Thanks, - Tom [gdb/testsuite] Fix ada tests with -fPIE/-pie When running the gdb testsuite with target board unix/-fPIE/-pie, the resulting ada executables are not PIE executables, because gnatmake doesn't recognize -pie, and consequently doesn't pass it to gnatlink. Fix this by replacing "-pie" with "-largs -pie -margs" in target_compile_ada_from_dir, and doing the same for -no-pie. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-08-08 Tom de Vries PR testsuite/24888 * lib/ada.exp (target_compile_ada_from_dir): Route -pie/-no-pie to gnatlink. --- gdb/testsuite/lib/ada.exp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gdb/testsuite/lib/ada.exp b/gdb/testsuite/lib/ada.exp index 1345c747c5..6a3fd33240 100644 --- a/gdb/testsuite/lib/ada.exp +++ b/gdb/testsuite/lib/ada.exp @@ -19,11 +19,36 @@ proc target_compile_ada_from_dir {builddir source dest type options} { set saved_cwd [pwd] + + global board + set board [target_info name] + set save_multilib_flag [board_info $board multilib_flags] + set multilib_flag "" + foreach op $save_multilib_flag { + if { $op == "-pie" || $op == "-no-pie" } { + # Pretend gnatmake supports -pie/-no-pie, route it to + # linker. + append multilib_flag " -largs $op -margs" + } else { + append multilib_flag " $op" + } + } + if { $multilib_flag != "" } { + unset_board_info "multilib_flags" + set_board_info multilib_flags "$multilib_flag" + } + catch { cd $builddir return [target_compile $source $dest $type $options] } result options cd $saved_cwd + + if { $save_multilib_flag != "" } { + unset_board_info "multilib_flags" + set_board_info multilib_flags $save_multilib_flag + } + return -options $options $result }