[pushed,gdb/testsuite] Add -wrap pattern flag to gdb_test_multiple

Message ID 20191024164406.5AA0C238BC@gnutoolchain-gerrit.osci.io
State New, archived
Headers

Commit Message

Simon Marchi (Code Review) Oct. 24, 2019, 4:44 p.m. UTC
  Sourceware to Gerrit sync has submitted this change.

Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/36
......................................................................

[gdb/testsuite] Add -wrap pattern flag to gdb_test_multiple

Currently, in order to rewrite:
...
gdb_test <command> <pattern> <message>
...
using gdb_test_multiple, we get:
...
gdb_test_multiple <command> <message> {
    -re "\[\r\n\]*(?:<pattern>)\[\r\n\]+$gdb_prompt $" {
    	pass $gdb_test_name
    }
}
...

Add a '-wrap 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 <command> <message> {
    -re -wrap <pattern> {
        pass $gdb_test_name
    }
}
...

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2019-10-24  Tom de Vries  <tdevries@suse.de>

	* lib/gdb.exp (gdb_test_multiple): Add -wrap pattern flag.
	* gdb.reverse/step-precsave.exp: Rewrite gdb_test_multiple containing
	kfail using -wrap pattern flag and convenience variable
	gdb_test_name.

Change-Id: Ie42c97d5ab7acf6db351299ccd23a83540fe6e1a
---
M gdb/testsuite/ChangeLog
M gdb/testsuite/gdb.reverse/step-precsave.exp
M gdb/testsuite/lib/gdb.exp
3 files changed, 38 insertions(+), 12 deletions(-)
  

Patch

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 12ef1fe..faee8e0 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,10 @@ 
+2019-10-24  Tom de Vries  <tdevries@suse.de>
+
+	* lib/gdb.exp (gdb_test_multiple): Add -wrap pattern flag.
+	* gdb.reverse/step-precsave.exp: Rewrite gdb_test_multiple containing
+	kfail using -wrap pattern flag and convenience variable
+	gdb_test_name.
+
 2019-10-24  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* gdb.python/py-progspace.exp: Add tests for the
diff --git a/gdb/testsuite/gdb.reverse/step-precsave.exp b/gdb/testsuite/gdb.reverse/step-precsave.exp
index 72ee279..2cdceef 100644
--- a/gdb/testsuite/gdb.reverse/step-precsave.exp
+++ b/gdb/testsuite/gdb.reverse/step-precsave.exp
@@ -46,19 +46,15 @@ 
 
 # 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.*"
-    set kfail2_pattern "Process record does not support instruction 0xfae64 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 -wrap "Breakpoint .* end of main .*" {
+	    pass $gdb_test_name
 	}
-	-re "\[\r\n\]*(?:$kfail_pattern)\[\r\n\]+$gdb_prompt $" {
-	    kfail "record/23188" $test
+	-re -wrap "Process record does not support instruction 0xc5 at.*" {
+	    kfail "record/23188" $gdb_test_name
 	}
-	-re "\[\r\n\]*(?:$kfail2_pattern)\[\r\n\]+$gdb_prompt $" {
-	    kfail "record/25038" $test
+	-re -wrap "Process record does not support instruction 0xfae64 at.*" {
+	    kfail "record/25038" $gdb_test_name
 	}
     }
 }
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index fed46ec..6770741 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -764,6 +764,17 @@ 
 # expected from $gdb_spawn_id.  IOW, callers do not need to worry
 # about resetting "-i" back to $gdb_spawn_id explicitly.
 #
+# In EXPECT_ARGUMENTS we can use a -wrap pattern flag, that wraps the regexp
+# pattern as gdb_test wraps its message argument.
+# This allows us to rewrite:
+#   gdb_test <command> <pattern> <message>
+# into:
+#   gdb_test_multiple <command> <message> {
+#       -re -wrap <pattern> {
+#           pass $gdb_test_name
+#       }
+#   }
+#
 proc gdb_test_multiple { command message user_code { prompt_regexp "" } } {
     global verbose use_gdb_stub
     global gdb_prompt pagination_prompt
@@ -825,6 +836,7 @@ 
     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
@@ -839,6 +851,10 @@ 
 	    lappend processed_code $item
 	    continue
 	}
+	if { $item == "-wrap" } {
+	    set wrap_pattern 1
+	    continue
+	}
 	if { $expecting_arg } {
 	    set expecting_arg 0
 	    lappend processed_code $subst_item
@@ -852,7 +868,14 @@ 
 	    continue
 	}
 	set expecting_action 1
-	lappend processed_code $subst_item
+	if { $wrap_pattern } {
+	    # Wrap subst_item as is done for the gdb_test PATTERN argument.
+	    lappend processed_code \
+		"\[\r\n\]*(?:$subst_item)\[\r\n\]+$gdb_prompt $"
+	    set wrap_pattern 0
+	} else {
+	    lappend processed_code $subst_item
+	}
 	if {$patterns != ""} {
 	    append patterns "; "
 	}