[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