From patchwork Sun Oct 6 08:29:34 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: 34835 Received: (qmail 127264 invoked by alias); 6 Oct 2019 08:29:38 -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 127256 invoked by uid 89); 6 Oct 2019 08:29:37 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.5 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; Sun, 06 Oct 2019 08:29:36 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 19EDAADDD; Sun, 6 Oct 2019 08:29:34 +0000 (UTC) Subject: Re: [PATCH][gdb/testsuite] Add -cooked pattern flag to gdb_test_multiple To: Andrew Burgess Cc: gdb-patches@sourceware.org References: <20190919111322.GA29391@delia> <20190919161846.GC4962@embecosm.com> <62b20c8f-6792-c17e-621a-946002df6df9@suse.de> <20190919192423.GF4962@embecosm.com> <86b5c1b8-ac35-5c7e-1a5d-89b8563ab761@suse.de> <20191005153835.GL4962@embecosm.com> From: Tom de Vries Openpgp: preference=signencrypt Message-ID: Date: Sun, 6 Oct 2019 10:29:34 +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: <20191005153835.GL4962@embecosm.com> X-IsSubscribed: yes On 05-10-19 17:38, Andrew Burgess wrote: > * Tom de Vries [2019-10-05 08:05:03 +0200]: > >> [ was: Re: [PATCH][gdb/testsuite] Introduce gdb_test_ext ] >> >> On 19-09-19 21:24, Andrew Burgess wrote: >>> On further thought, I actually think there's no need for an extra >>> function at all, we can get all the benefit (as I see it) by possibly >>> updating gdb_test_multiple. I'm travelling right now so can't code >>> this up, but I think a solution that does something like this: >>> >>> gdb_test_multiple "command" "test name" { >>> -re "full regexp here$gdb_prompt" { >>> pass $gdb_test_multiple_name >>> } >>> -output "pattern without prompt" { >>> fail $gdb_test_multiple_name >>> } >>> } >>> >>> So using '-re' and '-output' to specialise the behaviour of >>> gdb_test_multiple, and adding in the $gdb_test_multiple_name variable. >>> >>> When I get back to my desk I'll try to code this up. >> >> Hi, >> >> I took a stab at this. I'm not sure about the naming though. >> >> For the pattern flag I used the name -cooked. Perhaps -wrap is better? >> Any better suggestions? >> >> I used gdb_test_multiple_message (using the 'message' postfix because it >> matched the name of the gdb_test_multiple argument) for the convenience >> variable, but it's a tad long, perhaps we could abbreviate to >> 'gtm_message'? > > This duplicates work in this patch: > > https://sourceware.org/ml/gdb-patches/2019-10/msg00023.html > I've rebased on top of that patch (with gdb_test_multiple_name -> gdb_test_name applied). Thanks, - Tom [gdb/testsuite] Add -cooked pattern flag to gdb_test_multiple Currently, in order to rewrite: ... gdb_test ... using gdb_test_multiple, we get: ... gdb_test_multiple { -re "\[\r\n\]*(?:)\[\r\n\]+$gdb_prompt $" { pass $gdb_test_name } } ... Add a '-cooked' pattern flag to gdb_test_multiple, that wraps the regexp pattern as gdb_test wraps its message argument. This allows us to rewrite into the more compact: ... gdb_test_multiple { -re -cooked { pass $gdb_test_name } } ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-10-04 Tom de Vries * lib/gdb.exp (gdb_test_multiple): Add -cooked pattern flag. * gdb.reverse/step-precsave.exp: Rewrite gdb_test_multiple containing kfail using -cooked pattern flag and convenience variable gdb_test_name. --- gdb/testsuite/gdb.reverse/step-precsave.exp | 13 +++++-------- gdb/testsuite/lib/gdb.exp | 14 +++++++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp index 2073b8a1542..3ce786fc4c9 100644 --- a/gdb/testsuite/gdb.reverse/step-precsave.exp +++ b/gdb/testsuite/gdb.reverse/step-precsave.exp @@ -46,15 +46,12 @@ gdb_test "break $end_of_main" \ # This can take awhile. with_timeout_factor 20 { - set test "run to end of main" - set pass_pattern "Breakpoint .* end of main .*" - set kfail_pattern "Process record does not support instruction 0xc5 at.*" - gdb_test_multiple "continue" $test { - -re "\[\r\n\]*(?:$pass_pattern)\[\r\n\]+$gdb_prompt $" { - pass $test + gdb_test_multiple "continue" "run to end of main" { + -re -cooked "Breakpoint .* end of main .*" { + pass $gdb_test_name } - -re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" { - kfail "record/23188" $test + -re -cooked "Process record does not support instruction 0xc5 at.*" { + kfail "record/23188" $gdb_test_name } } } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index d23d51572cc..f73313f1cb0 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -821,6 +821,7 @@ proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { set patterns "" set expecting_action 0 set expecting_arg 0 + set cooked 0 foreach item $user_code subst_item $subst_code { if { $item == "-n" || $item == "-notransfer" || $item == "-nocase" } { lappend processed_code $item @@ -835,6 +836,10 @@ proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { lappend processed_code $item continue } + if { $item == "-cooked" } { + set cooked 1 + continue + } if { $expecting_arg } { set expecting_arg 0 lappend processed_code $subst_item @@ -848,7 +853,14 @@ proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { continue } set expecting_action 1 - lappend processed_code $subst_item + if { $cooked } { + # Wrap subst_item as is done for the gdb_test PATTERN argument. + lappend processed_code \ + "\[\r\n\]*(?:$subst_item)\[\r\n\]+$gdb_prompt $" + set cooked 0 + } else { + lappend processed_code $subst_item + } if {$patterns != ""} { append patterns "; " }