[RFC,gdb/testsuite] Handle -line and -non-empty-line in gdb_test_multiple
Commit Message
[ 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
[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(-)
@@ -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
@@ -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
@@ -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
@@ -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
}
}
@@ -50,7 +50,7 @@ gdb_test_multiple $test $test {
}
exp_continue
}
- -re "^\[^\r\n\]*\r\n" {
+ -line {
exp_continue
}
-re "^$gdb_prompt $" {
@@ -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