From patchwork Wed Feb 19 06:07:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 38220 Received: (qmail 19088 invoked by alias); 19 Feb 2020 06:07:29 -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 19079 invoked by uid 89); 19 Feb 2020 06:07:28 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.1 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: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 19 Feb 2020 06:07:26 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 16616AEBF; Wed, 19 Feb 2020 06:07:23 +0000 (UTC) Subject: Re: [RFC][gdb/testsuite] Ignore pass in gdb_caching_proc To: Tom Tromey Cc: Simon Marchi , gdb-patches@sourceware.org References: <20200213105754.GA22520@delia> <87imkapngd.fsf@tromey.com> <2319b744-2902-9c09-2448-450e40347c04@suse.de> <875zg3ewxn.fsf@tromey.com> From: Tom de Vries Message-ID: <8a9dc4ed-1682-bfe8-a12f-d1ee69a0ff6a@suse.de> Date: Wed, 19 Feb 2020 07:07:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <875zg3ewxn.fsf@tromey.com> X-IsSubscribed: yes On 18-02-2020 16:29, Tom Tromey wrote: >>>>>> "Tom" == Tom de Vries writes: > > Tom> +proc ignore_pass { msg } { > Tom> + verbose -log "gdb_do_cache_wrap ignoring pass: $msg" > Tom> +} > Tom> + > Tom> +proc gdb_do_cache_wrap {real_name} { > Tom> + if { [info procs save_pass] != "" } { > > I think the new procs should have introductory comments, but other than > that, this seems fine to me. Done, and committed as below. Thanks, - Tom [gdb/testsuite] Ignore pass in gdb_caching_proc Before commit d4295de4f3 "[gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_info", calling the gdb_caching_proc gnat_runtime_has_debug_info could generate a pass because of using gdb_compile_ada. This has been fixed in that commit by using a factored out variant gdb_compile_ada_1, which does not call pass. Additionally, fix cases like this in more generic way: by ignoring pass calls during execution of a gdb_caching_proc. Build and reg-tested on x86_64-linux. gdb/testsuite/ChangeLog: 2020-02-18 Tom de Vries * lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc. (gdb_do_cache): Use gdb_do_cache_wrap. * gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap. --- gdb/testsuite/gdb.base/gdb-caching-proc.exp | 4 ++-- gdb/testsuite/lib/cache.exp | 31 ++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.base/gdb-caching-proc.exp b/gdb/testsuite/gdb.base/gdb-caching-proc.exp index b2d71a5e7d..3810347a65 100644 --- a/gdb/testsuite/gdb.base/gdb-caching-proc.exp +++ b/gdb/testsuite/gdb.base/gdb-caching-proc.exp @@ -28,7 +28,7 @@ proc test_proc { name } { set resultlist [list] - set first [$real_name] + set first [gdb_do_cache_wrap $real_name] lappend resultlist $first # Ten repetitions was enough to trigger target_supports_scheduler_locking, @@ -37,7 +37,7 @@ proc test_proc { name } { set racy 0 for {set i 0} {$i < $repeat} {incr i} { - set rerun [$real_name] + set rerun [gdb_do_cache_wrap $real_name] lappend resultlist $rerun if { $rerun != $first } { set racy 1 diff --git a/gdb/testsuite/lib/cache.exp b/gdb/testsuite/lib/cache.exp index dc57cab964..25bfe02510 100644 --- a/gdb/testsuite/lib/cache.exp +++ b/gdb/testsuite/lib/cache.exp @@ -17,6 +17,35 @@ # The in-memory cache. array set gdb_data_cache {} +# Print pass message msg into gdb.log +proc ignore_pass { msg } { + verbose -log "gdb_do_cache_wrap ignoring pass: $msg" +} + +# Call proc real_name and return the result, while ignoring calls to pass. +proc gdb_do_cache_wrap {real_name} { + if { [info procs save_pass] != "" } { + return [uplevel 2 $real_name] + } + + rename pass save_pass + rename ignore_pass pass + + set code [catch {uplevel 2 $real_name} result] + + rename pass ignore_pass + rename save_pass pass + + if {$code == 1} { + global errorInfo errorCode + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif {$code > 1} { + return -code $code $result + } + + return $result +} + # A helper for gdb_caching_proc that handles the caching. proc gdb_do_cache {name} { @@ -46,7 +75,7 @@ proc gdb_do_cache {name} { } set real_name gdb_real__$name - set gdb_data_cache($cache_name) [uplevel 1 $real_name] + set gdb_data_cache($cache_name) [gdb_do_cache_wrap $real_name] if {[info exists GDB_PARALLEL]} { verbose "$name: returning '$gdb_data_cache($cache_name)' and writing file" 2