From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by sourceware.org (Postfix) with ESMTPS id A72F5388E83C for ; Wed, 17 Jun 2020 13:18:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A72F5388E83C 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.220.254]) by mx2.suse.de (Postfix) with ESMTP id E6860ADC5 for ; Wed, 17 Jun 2020 13:19:02 +0000 (UTC) Date: Wed, 17 Jun 2020 15:18:57 +0200 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH][gdb/testsuite] Remove dependence on tcl_unknown Message-ID: <20200617131855.GA1705@delia> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.10.1 (2018-07-13) X-Spam-Status: No, score=-15.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org 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: , X-List-Received-Date: Wed, 17 Jun 2020 13:19:00 -0000 Hi, In gdb_init we install a local version of ::unknown, which relies on ::tcl_unknown, which is defined by dejagnu. This proc may be moved in to a namespace, or disappear altogether, as indicated by dejagnu maintainers, so we can't rely on it. Fix this by recreating tcl's version of unknown, and using that instead. Tested on x86_64-linux. Any comments? Thanks, - Tom [gdb/testsuite] Remove dependence on tcl_unknown gdb/testsuite/ChangeLog: 2020-06-17 Tom de Vries * lib/gdb.exp (gdb_tcl_unknown): New proc. (gdb_init): Use gdb_tcl_unknown for ::unknown override. Make override conditional on presence of gdb_tcl_unknown. (gdb_finish): Make override undo conditional on presence of gdb_tcl_unknown. --- gdb/testsuite/lib/gdb.exp | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f502eb157d..02867fb5bd 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -5177,6 +5177,17 @@ proc gdb_cleanup_globals {} { } } +# Create gdb_tcl_unknown, a copy tcl's ::unknown, provided it's present as a +# proc. +set temp [interp create] +if { [interp eval $temp "info procs ::unknown"] != "" } { + set old_args [interp eval $temp "info args ::unknown"] + set old_body [interp eval $temp "info body ::unknown"] + eval proc gdb_tcl_unknown {$old_args} {$old_body} +} +interp delete $temp +unset temp + proc gdb_init { test_file_name } { # Reset the timeout value to the default. This way, any testcase # that changes the timeout value without resetting it cannot affect @@ -5283,14 +5294,16 @@ proc gdb_init { test_file_name } { gdb_setup_known_globals - # Dejagnu overrides proc unknown. The dejagnu version may trigger in a - # test-case but abort the entire test run. To fix this, we install a - # local version here, which reverts dejagnu's override, and restore - # dejagnu's version in gdb_finish. - rename ::unknown ::dejagnu_unknown - proc unknown { args } { - # Dejagnu saves the original version in ::tcl_unknown, use it. - return [uplevel 1 ::tcl_unknown $args] + if { [info procs ::gdb_tcl_unknown] != "" } { + # Dejagnu overrides proc unknown. The dejagnu version may trigger in a + # test-case but abort the entire test run. To fix this, we install a + # local version here, which reverts dejagnu's override, and restore + # dejagnu's version in gdb_finish. + rename ::unknown ::dejagnu_unknown + proc unknown { args } { + # Use tcl's unknown. + return [uplevel 1 ::gdb_tcl_unknown $args] + } } return $res @@ -5302,9 +5315,11 @@ proc gdb_finish { } { global cleanfiles global known_globals - # Restore dejagnu's version of proc unknown. - rename ::unknown "" - rename ::dejagnu_unknown ::unknown + if { [info procs ::gdb_tcl_unknown] != "" } { + # Restore dejagnu's version of proc unknown. + rename ::unknown "" + rename ::dejagnu_unknown ::unknown + } # Exit first, so that the files are no longer in use. gdb_exit