From patchwork Sat Oct 5 06:05:03 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: 34834 Received: (qmail 128180 invoked by alias); 5 Oct 2019 06:05:09 -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 128172 invoked by uid 89); 5 Oct 2019 06:05:08 -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=att, specialise, sk:$gdb_te, travelling 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; Sat, 05 Oct 2019 06:05:07 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 354A4AD88; Sat, 5 Oct 2019 06:05:05 +0000 (UTC) Subject: [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> From: Tom de Vries Openpgp: preference=signencrypt Message-ID: <86b5c1b8-ac35-5c7e-1a5d-89b8563ab761@suse.de> Date: Sat, 5 Oct 2019 08:05:03 +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: <20190919192423.GF4962@embecosm.com> X-IsSubscribed: yes [ 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'? 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: ... set msg gdb_test_multiple $msg { -re "\[\r\n\]*(?:)\[\r\n\]+$gdb_prompt $" { pass $msg } } ... Add to gdb_test_multiple: - a '-cooked' pattern flag, that wraps the regexp pattern as gdb_test wraps its message argument. - a convenience variable gdb_test_multiple_message This allows us to rewrite into the more compact: ... gdb_test_multiple { -re -cooked { pass $gdb_test_multiple_message } } ... Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-10-04 Tom de Vries * lib/gdb.exp (gdb_test_multiple): Add -cooked pattern flag and convenience variable gdb_test_multiple_message. * gdb.reverse/step-precsave.exp: Rewrite gdb_test_multiple containing kfail using -cooked pattern flag and convenience variable gdb_test_multiple_message. --- gdb/testsuite/gdb.reverse/step-precsave.exp | 13 +++++-------- gdb/testsuite/lib/gdb.exp | 25 ++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp index 2073b8a1542..aaddd3b4ada 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_multiple_message } - -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_multiple_message } } } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 3a1f053cf8a..4a47ddc9d37 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -772,6 +772,11 @@ proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { error "Invalid newline in \"$message\" test" } + upvar 1 gdb_test_multiple_message gdb_test_multiple_message + if { [info exists gdb_test_multiple_message] } { + set gdb_test_multiple_message_save $gdb_test_multiple_message + } + if {$use_gdb_stub && [regexp -nocase {^\s*(r|run|star|start|at|att|atta|attac|attach)\M} \ $command]} { @@ -807,6 +812,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 @@ -821,6 +827,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 @@ -834,7 +844,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 "; " } @@ -1038,8 +1055,14 @@ proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { } } + set gdb_test_multiple_message $message set result 0 set code [catch {gdb_expect $code} string] + if { [info exists gdb_test_multiple_message_save] } { + set gdb_test_multiple_message $gdb_test_multiple_message_save + } else { + unset gdb_test_multiple_message + } if {$code == 1} { global errorInfo errorCode return -code error -errorinfo $errorInfo -errorcode $errorCode $string