From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id sA6rMTQN31+CMAAAWB0awg (envelope-from ) for ; Sun, 20 Dec 2020 03:37:08 -0500 Received: by simark.ca (Postfix, from userid 112) id C59571F0AA; Sun, 20 Dec 2020 03:37:08 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 625F71E99A for ; Sun, 20 Dec 2020 03:37:08 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9B58A3858018; Sun, 20 Dec 2020 08:37:07 +0000 (GMT) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id 58C2B3851C34 for ; Sun, 20 Dec 2020 08:37:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 58C2B3851C34 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tdevries@suse.de X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.221.27]) by mx2.suse.de (Postfix) with ESMTP id 72D6CAC7F; Sun, 20 Dec 2020 08:37:03 +0000 (UTC) Subject: [committed][gdb/testsuite] Add save_target_board_info To: Simon Marchi , Simon Marchi , gdb-patches@sourceware.org References: <20201213164131.GA7699@delia> <60fb40c8-73ca-e6de-e45f-805fba548f88@simark.ca> <1a23f50f-bf4f-ae09-7ff5-b23e59d6438b@suse.de> <9f2a5364-9651-2842-2d64-439ef14957fd@suse.de> <0ddc6cbe-880e-7cb7-5754-6a503dcaf80d@polymtl.ca> From: Tom de Vries Message-ID: Date: Sun, 20 Dec 2020 09:37:02 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0 MIME-Version: 1.0 In-Reply-To: <0ddc6cbe-880e-7cb7-5754-6a503dcaf80d@polymtl.ca> Content-Type: multipart/mixed; boundary="------------D1B1C2C820C46985DE5942C2" Content-Language: en-US X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" This is a multi-part message in MIME format. --------------D1B1C2C820C46985DE5942C2 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit [ was: Re: [PATCH][gdb/testsuite] Fix shlib compilation with target board unix/-pie/-fPIE ] On 12/20/20 3:29 AM, Simon Marchi wrote: > > > On 2020-12-19 12:44 p.m., Tom de Vries wrote: >> I thought this over a bit more, and came to the realization that what >> this does is similar to save_vars, only for target board_info. >> >> So, how about this refactoring? > > Makes sense, but I would opt for a separate save_target_board_info proc > instead, it's a bit easier to remember how to use, and will keep each > implementation simple. > Done, committed as attached. Thanks, - Tom --------------D1B1C2C820C46985DE5942C2 Content-Type: text/x-patch; charset=UTF-8; name="0001-gdb-testsuite-Add-save_target_board_info.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="0001-gdb-testsuite-Add-save_target_board_info.patch" [gdb/testsuite] Add save_target_board_info Add a proc save_target_board_info, similar to save_vars, such that we can do: ... save_target_board_info { multilib_flags } { global board set board [target_info name] unset_board_info multilib_flags set_board_info multilib_flags "$override_multilib_flags" ... } ... and use it in gdb_compile_shlib. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-12-19 Tom de Vries * lib/gdb.exp (save_target_board_info): New proc. (gdb_compile_shlib): Use save_target_board_info. --- gdb/testsuite/lib/gdb.exp | 75 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index e91023093e..5bdc7ff8ee 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -2427,6 +2427,53 @@ proc save_vars { vars body } { } } +# As save_vars, but for variables stored in the board_info for the +# target board. +# +# Usage example: +# +# save_target_board_info { multilib_flags } { +# global board +# set board [target_info name] +# unset_board_info multilib_flags +# set_board_info multilib_flags "$multilib_flags" +# ... +# } + +proc save_target_board_info { vars body } { + global board board_info + set board [target_info name] + + array set saved_target_board_info { } + set unset_target_board_info { } + + foreach var $vars { + if { [info exists board_info($board,$var)] } { + set saved_target_board_info($var) [board_info $board $var] + } else { + lappend unset_target_board_info $var + } + } + + set code [catch {uplevel 1 $body} result] + + foreach {var value} [array get saved_target_board_info] { + unset_board_info $var + set_board_info $var $value + } + + foreach var $unset_target_board_info { + unset_board_info $var + } + + if {$code == 1} { + global errorInfo errorCode + return -code $code -errorinfo $errorInfo -errorcode $errorCode $result + } else { + return -code $code $result + } +} + # Run tests in BODY with the current working directory (CWD) set to # DIR. When BODY is finished, restore the original CWD. Return the # result of BODY. @@ -4422,32 +4469,22 @@ proc gdb_compile_shlib_1 {sources dest options} { proc gdb_compile_shlib {sources dest options} { global board - # Save multilib_flags. - set board [target_info name] - set save_multilib_flag [board_info $board multilib_flags] - # Ignore PIE-related setting in multilib_flags. - set multilib_flag "" - foreach op $save_multilib_flag { + set board [target_info name] + set multilib_flags_orig [board_info $board multilib_flags] + set multilib_flags "" + foreach op $multilib_flags_orig { if { $op == "-pie" || $op == "-no-pie" \ || $op == "-fPIE" || $op == "-fno-PIE"} { } else { - append multilib_flag " $op" + append multilib_flags " $op" } } - unset_board_info "multilib_flags" - set_board_info multilib_flags "$multilib_flag" - set code [catch {gdb_compile_shlib_1 $sources $dest $options} result] - # Restore multilib_flags. - unset_board_info "multilib_flags" - set_board_info multilib_flags $save_multilib_flag - - if {$code == 1} { - global errorInfo errorCode - return -code error -errorinfo $errorInfo -errorcode $errorCode $result - } elseif {$code > 1} { - return -code $code $result + save_target_board_info { multilib_flags } { + unset_board_info multilib_flags + set_board_info multilib_flags "$multilib_flags" + set result [gdb_compile_shlib_1 $sources $dest $options] } return $result --------------D1B1C2C820C46985DE5942C2--