[RFC,gdb/testsuite] Handle -line and -non-empty-line in gdb_test_multiple

Message ID 0208e698-e2e1-c13f-486f-caa3f7766d6a@suse.de
State New, archived
Headers

Commit Message

Tom de Vries Feb. 19, 2020, 9:30 p.m. UTC
  [ was: Re: [PATCH][gdb/testsuite] Fix corefile-buildid.exp with
check-read1 ]
On 19-02-2020 21:09, Pedro Alves wrote:
> On 2/19/20 5:40 PM, Tom de Vries wrote:
>> Hi,
>>
>> When running gdb.base/corefile-buildid.exp using check-read1, I run into:
>> ...
>> FAIL: gdb.base/corefile-buildid.exp: shared: info files (timeout)
>> FAIL: gdb.base/corefile-buildid.exp: symlink shared: info files (timeout)
>> FAIL: gdb.base/corefile-buildid.exp: shared sepdebug: info files (timeout)
>> FAIL: gdb.base/corefile-buildid.exp: symlink shared sepdebug: info files \
>>   (timeout)
>> ...
>>
>> This is caused by attempting to match the output of an "info files" command
>> using a single gdb_test in check_exec_file.
>>
>> Fix this by doing line-by-line matching in check_exec_file.
>>
>> Tested on x86_64-linux, using make targets check and check-read1.
>>
>> OK for trunk?
> 
> OK.
> 

Committed.

> If this pattern appears in more places it may be worth it to
> think about some abstraction to make it easier to write.
> Like e.g., a new "-lbl" (line-by-line) option switch to
> gdb_test_multiple that auto-appends the "match one line" regexp.

How about this?

Thanks,
- Tom
  

Patch

[gdb/testsuite] Handle -line and -non-empty-line in gdb_test_multiple

Add predefined regexps in gdb_test_multiple:
* -line
  meaning -re "^\[^\r\n\]*\r\n"
* -non-empty-line
  meaning -re "^\[^\r\n\]+\r\n"

Reg-tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-02-19  Tom de Vries  <tdevries@suse.de>

	* lib/gdb.exp (gdb_test_multiple): Handle -line and -non-empty-line.
	* gdb.base/corefile-buildid.exp: Use -line.
	* gdb.base/solib-corrupted.exp: Same.
	* gdb.arch/mips-fpregset-core.exp: Use -non-empty-line.
	* gdb.base/auxv.exp: Same.
	* gdb.base/callfuncs.exp: Same.

---
 gdb/testsuite/gdb.arch/mips-fpregset-core.exp |  2 +-
 gdb/testsuite/gdb.base/auxv.exp               |  2 +-
 gdb/testsuite/gdb.base/callfuncs.exp          |  2 +-
 gdb/testsuite/gdb.base/corefile-buildid.exp   |  6 +++---
 gdb/testsuite/gdb.base/solib-corrupted.exp    |  2 +-
 gdb/testsuite/lib/gdb.exp                     | 19 +++++++++++++++++++
 6 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/gdb/testsuite/gdb.arch/mips-fpregset-core.exp b/gdb/testsuite/gdb.arch/mips-fpregset-core.exp
index 3a199f8eba..fecc9f00e3 100644
--- a/gdb/testsuite/gdb.arch/mips-fpregset-core.exp
+++ b/gdb/testsuite/gdb.arch/mips-fpregset-core.exp
@@ -55,7 +55,7 @@  proc mips_fpregset_core_fetch_float_registers { test } {
 	-re "$gdb_prompt $" {
 	    incr bad
 	}
-	-re "^\[^\r\n\]+\r\n" {
+	-non-empty-line {
 	    if { !$bad } {
 		warning "Unrecognized output: $expect_out(0,string)"
 		set bad 1
diff --git a/gdb/testsuite/gdb.base/auxv.exp b/gdb/testsuite/gdb.base/auxv.exp
index 9834a3564d..5a54599fc1 100644
--- a/gdb/testsuite/gdb.base/auxv.exp
+++ b/gdb/testsuite/gdb.base/auxv.exp
@@ -100,7 +100,7 @@  proc fetch_auxv {test} {
 	-re "$gdb_prompt $" {
 	    incr bad
 	}
-	-re "^\[^\r\n\]+\r\n" {
+	-non-empty-line {
 	    if {!$bad} {
 		warning "Unrecognized output: $expect_out(0,string)"
 		set bad 1
diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp
index 5d98541745..33740922e7 100644
--- a/gdb/testsuite/gdb.base/callfuncs.exp
+++ b/gdb/testsuite/gdb.base/callfuncs.exp
@@ -302,7 +302,7 @@  proc fetch_all_registers {test} {
 	-re "$gdb_prompt $" {
 	    incr bad
 	}
-	-re "^\[^\r\n\]+\r\n" {
+	-non-empty-line {
 	    if {!$bad} {
 		warning "Unrecognized output: $expect_out(0,string)"
 		set bad 1
diff --git a/gdb/testsuite/gdb.base/corefile-buildid.exp b/gdb/testsuite/gdb.base/corefile-buildid.exp
index b9844ee354..43e44443d5 100644
--- a/gdb/testsuite/gdb.base/corefile-buildid.exp
+++ b/gdb/testsuite/gdb.base/corefile-buildid.exp
@@ -121,7 +121,7 @@  proc check_exec_file {file} {
 	-re "^$gdb_prompt $" {
 	    fail $gdb_test_name
 	}
-	-re "^\[^\r\n\]*\r\n" {
+	-line {
 	    exp_continue
 	}
     }
@@ -139,7 +139,7 @@  proc check_exec_file {file} {
 	-re "^$gdb_prompt $" {
 	    fail $gdb_test_name
 	}
-	-re "^\[^\r\n\]*\r\n" {
+	-line {
 	    exp_continue
 	}
     }
@@ -153,7 +153,7 @@  proc check_exec_file {file} {
 	-re "^$gdb_prompt $" {
 	    pass $gdb_test_name
 	}
-	-re "^\[^\r\n\]*\r\n" {
+	-line {
 	    exp_continue
 	}
     }
diff --git a/gdb/testsuite/gdb.base/solib-corrupted.exp b/gdb/testsuite/gdb.base/solib-corrupted.exp
index 5ee943cae1..10adb9a0ba 100644
--- a/gdb/testsuite/gdb.base/solib-corrupted.exp
+++ b/gdb/testsuite/gdb.base/solib-corrupted.exp
@@ -50,7 +50,7 @@  gdb_test_multiple $test $test {
 	}
 	exp_continue
     }
-    -re "^\[^\r\n\]*\r\n" {
+    -line {
 	exp_continue
     }
     -re "^$gdb_prompt $" {
diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
index d5e2295703..7fd783e786 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -792,6 +792,13 @@  proc gdb_internal_error_resync {} {
 #	}
 #    }
 #
+# In EXPECT_ARGUMENTS, instead of -re "bla" we can use a few predefined
+# regexps:
+# * -line
+#    meaning -re "^\[^\r\n\]*\r\n"
+# * -non-empty-line
+#    meaning -re "^\[^\r\n\]+\r\n"
+#
 proc gdb_test_multiple { command message user_code { prompt_regexp "" } } {
     global verbose use_gdb_stub
     global gdb_prompt pagination_prompt
@@ -867,6 +874,18 @@  proc gdb_test_multiple { command message user_code { prompt_regexp "" } } {
 	    lappend $current_list $item
 	    continue
 	}
+	if { $item == "-line" } {
+	    lappend $current_list -re
+	    lappend $current_list "^\[^\r\n\]*\r\n"	
+	    set expecting_action 1
+	    continue
+	}
+	if { $item == "-non-empty-line" } {
+	    lappend $current_list -re
+	    lappend $current_list "^\[^\r\n\]+\r\n"
+	    set expecting_action 1
+	    continue
+	}
 	if { $item == "-early" } {
 	    set current_list "early_processed_code"
 	    continue