From patchwork Thu Oct 24 20:03:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Simon Marchi (Code Review)" X-Patchwork-Id: 35291 Received: (qmail 52778 invoked by alias); 24 Oct 2019 20:03:06 -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 51914 invoked by uid 89); 24 Oct 2019 20:03:05 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy=Cosmetic, sk:breakp X-HELO: mx1.osci.io Received: from polly.osci.io (HELO mx1.osci.io) (8.43.85.229) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 24 Oct 2019 20:03:04 +0000 Received: by mx1.osci.io (Postfix, from userid 994) id 954E020492; Thu, 24 Oct 2019 16:03:02 -0400 (EDT) Received: from gnutoolchain-gerrit.osci.io (gnutoolchain-gerrit.osci.io [IPv6:2620:52:3:1:5054:ff:fe06:16ca]) by mx1.osci.io (Postfix) with ESMTP id 19C0820172; Thu, 24 Oct 2019 16:03:01 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by gnutoolchain-gerrit.osci.io (Postfix) with ESMTP id F2C03204C9; Thu, 24 Oct 2019 16:03:00 -0400 (EDT) X-Gerrit-PatchSet: 3 Date: Thu, 24 Oct 2019 16:03:00 -0400 From: "Tom de Vries (Code Review)" To: Simon Marchi , gdb-patches@sourceware.org Auto-Submitted: auto-generated X-Gerrit-MessageType: newpatchset Subject: [review v3] [gdb/testsuite] Add -early pattern flag for gdb_test_multiple X-Gerrit-Change-Id: I376c636b0812be52e7137634b1a4f50bf2b999b6 X-Gerrit-Change-Number: 34 X-Gerrit-ChangeURL: X-Gerrit-Commit: c47d38fa6e7c7ce26c515319049b13396da6a5ed In-Reply-To: References: Reply-To: tdevries@suse.de, simon.marchi@polymtl.ca, gdb-patches@sourceware.org MIME-Version: 1.0 Content-Disposition: inline User-Agent: Gerrit/3.0.3 Message-Id: <20191024200300.F2C03204C9@gnutoolchain-gerrit.osci.io> Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/34 ...................................................................... [gdb/testsuite] Add -early pattern flag for gdb_test_multiple Proc gdb_test_multiple builds up and executes a gdb_expect expression with pattern/action clauses. The clauses are either implicit (added by gdb_test_multiple) or explicit (passed via the gdb_test_multiple parameter user_code). However, there are a few implicit clauses which are inserted before the explicit ones, making sure those take precedence. Add an -early pattern flag for a gdb_test_multiple user_code clause to specify that the clause needs to be inserted before any implicit clause. Using this pattern flag, we can f.i. setup a kfail for an assertion failure during gdb_continue_to_breakpoint by the rewrite: ... gdb_continue_to_breakpoint ... into: ... set breakpoint_pattern "(?:Breakpoint|Temporary breakpoint) .* (at|in)" gdb_test_multiple "continue" "continue to breakpoint: " { -early -re "internal-error: " { setup_kfail gdb/nnnnn "*-*-*" exp_continue } -re "$breakpoint_pattern \r\n$gdb_prompt $" { pass $gdb_test_name } } Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2019-09-12 Tom de Vries * lib/gdb.exp (gdb_test_multiple): Handle -early pattern flag. Change-Id: I376c636b0812be52e7137634b1a4f50bf2b999b6 --- M gdb/testsuite/lib/gdb.exp 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 6770741..599bf0f 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -775,6 +775,23 @@ # } # } # +# In EXPECT_ARGUMENTS, a pattern flag -early can be used. It makes sure the +# pattern is inserted before any implicit pattern added by gdb_test_multiple. +# Using this pattern flag, we can f.i. setup a kfail for an assertion failure +# during gdb_continue_to_breakpoint by the rewrite: +# gdb_continue_to_breakpoint +# into: +# set breakpoint_pattern "(?:Breakpoint|Temporary breakpoint) .* (at|in)" +# gdb_test_multiple "continue" "continue to breakpoint: " { +# -early -re "internal-error: " { +# setup_kfail gdb/nnnnn "*-*-*" +# exp_continue +# } +# -re "$breakpoint_pattern \r\n$gdb_prompt $" { +# pass $gdb_test_name +# } +# } +# proc gdb_test_multiple { command message user_code { prompt_regexp "" } } { global verbose use_gdb_stub global gdb_prompt pagination_prompt @@ -833,22 +850,30 @@ set subst_code [uplevel list $subst_code] set processed_code "" + set early_processed_code "" + # The variable current_list holds the name of the currently processed + # list, either processed_code or early_processed_code. + set current_list "processed_code" set patterns "" set expecting_action 0 set expecting_arg 0 set wrap_pattern 0 foreach item $user_code subst_item $subst_code { if { $item == "-n" || $item == "-notransfer" || $item == "-nocase" } { - lappend processed_code $item + lappend $current_list $item continue } if { $item == "-indices" || $item == "-re" || $item == "-ex" } { - lappend processed_code $item + lappend $current_list $item + continue + } + if { $item == "-early" } { + set current_list "early_processed_code" continue } if { $item == "-timeout" || $item == "-i" } { set expecting_arg 1 - lappend processed_code $item + lappend $current_list $item continue } if { $item == "-wrap" } { @@ -857,24 +882,26 @@ } if { $expecting_arg } { set expecting_arg 0 - lappend processed_code $subst_item + lappend $current_list $subst_item continue } if { $expecting_action } { - lappend processed_code "uplevel [list $item]" + lappend $current_list "uplevel [list $item]" set expecting_action 0 # Cosmetic, no effect on the list. - append processed_code "\n" + append $current_list "\n" + # End the effect of -early, it only applies to one action. + set current_list "processed_code" continue } set expecting_action 1 if { $wrap_pattern } { # Wrap subst_item as is done for the gdb_test PATTERN argument. - lappend processed_code \ + lappend $current_list \ "\[\r\n\]*(?:$subst_item)\[\r\n\]+$gdb_prompt $" set wrap_pattern 0 } else { - lappend processed_code $subst_item + lappend $current_list $subst_item } if {$patterns != ""} { append patterns "; " @@ -938,7 +965,8 @@ } } - set code { + set code $early_processed_code + append code { -re ".*A problem internal to GDB has been detected" { fail "$message (GDB internal error)" gdb_internal_error_resync