diff options
author | Pedro Alves <pedro@palves.net> | 2022-05-18 13:22:02 +0100 |
---|---|---|
committer | Pedro Alves <pedro@palves.net> | 2022-05-25 13:44:12 +0100 |
commit | cce0ae568c7e30e0a7b8d1bd77f8c4b7d7b8ce7b (patch) | |
tree | 14e4c08fb31df4412278a62a4bdf5f739be6d698 /gdb/testsuite/gdb.trace/collection.exp | |
parent | aee9dcf8a836fe08e3d7f1b58a8b6dd2e16d9b68 (diff) | |
download | gdb-cce0ae568c7e30e0a7b8d1bd77f8c4b7d7b8ce7b.zip gdb-cce0ae568c7e30e0a7b8d1bd77f8c4b7d7b8ce7b.tar.gz gdb-cce0ae568c7e30e0a7b8d1bd77f8c4b7d7b8ce7b.tar.bz2 |
gdb: Fix DUPLICATE and PATH regressions throughout
The previous patch to add -prompt/-lbl to gdb_test introduced a
regression: Before, you could specify an explicit empty message to
indicate you didn't want to PASS, like so:
gdb_test COMMAND PATTERN ""
After said patch, gdb_test no longer distinguishes
no-message-specified vs empty-message, so tests that previously would
be silent on PASS, now started emitting PASS messages based on
COMMAND. This in turn introduced a number of PATH/DUPLICATE
violations in the testsuite.
This commit fixes all the regressions I could see.
This patch uses the new -nopass feature introduced in the previous
commit, but tries to avoid it if possible. Most of the patch fixes
DUPLICATE issues the usual way, of using with_test_prefix or explicit
unique messages.
See previous commit's log for more info.
In addition to looking for DUPLICATEs, I also looked for cases where
we would now end up with an empty message in gdb.sum, due to a
gdb_test being passed both no message and empty command. E.g., this
in gdb.ada/bp_reset.exp:
gdb_run_cmd
gdb_test "" "Breakpoint $decimal, foo\\.nested_sub \\(\\).*"
was resulting in this in gdb.sum:
PASS: gdb.ada/bp_reset.exp:
I fixed such cases by passing an explicit message. We may want to
make such cases error out.
Tested on x86_64 GNU/Linux, native and native-extended-gdbserver. I
see zero PATH cases now. I get zero DUPLICATEs with native testing
now. I still see some DUPLICATEs with native-extended-gdbserver, but
those were preexisting, unrelated to the gdb_test change.
Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2
Diffstat (limited to 'gdb/testsuite/gdb.trace/collection.exp')
-rw-r--r-- | gdb/testsuite/gdb.trace/collection.exp | 722 |
1 files changed, 371 insertions, 351 deletions
diff --git a/gdb/testsuite/gdb.trace/collection.exp b/gdb/testsuite/gdb.trace/collection.exp index 0f8b721..c261b3c 100644 --- a/gdb/testsuite/gdb.trace/collection.exp +++ b/gdb/testsuite/gdb.trace/collection.exp @@ -68,29 +68,26 @@ proc prepare_for_trace_test {} { gdb_breakpoint "end" qualified } -proc run_trace_experiment { msg test_func } { +proc run_trace_experiment { test_func } { global gdb_prompt - gdb_test "continue" \ - ".*Breakpoint \[0-9\]+, begin .*" \ - "collect $msg: advance to begin" + with_test_prefix "run trace experiment" { + gdb_test "continue" \ + ".*Breakpoint \[0-9\]+, begin .*" \ + "advance to begin" - set test "collect $msg: start trace experiment" - gdb_test_multiple "tstart" "$test" { - -re "^tstart\r\n$gdb_prompt $" { - pass "$test" - } - } + gdb_test_no_output "tstart" "start trace experiment" - gdb_test "continue" \ + gdb_test "continue" \ "Continuing.*Breakpoint \[0-9\]+, end.*" \ - "collect $msg: run trace experiment" - gdb_test "tstop" \ + "run trace experiment" + gdb_test "tstop" \ "\[\r\n\]+" \ - "collect $msg: stop trace experiment" - gdb_test "tfind start" \ + "stop trace experiment" + gdb_test "tfind start" \ "#0 $test_func .*" \ - "collect $msg: tfind test frame" + "tfind test frame" + } } @@ -102,128 +99,136 @@ proc gdb_collect_args_test { myargs msg } { global cr global gdb_prompt - prepare_for_trace_test + with_test_prefix "collect $msg" { + prepare_for_trace_test - gdb_test "trace args_test_func" \ + gdb_test "trace args_test_func" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $myargs" "^$" - # Begin the test. - run_trace_experiment $msg args_test_func + # Begin the test. + run_trace_experiment args_test_func - # Frame arguments and their entry values are displayed correctly with - # various values of "print entry-values" when a trace frame is - # selected. + # Frame arguments and their entry values are displayed correctly with + # various values of "print entry-values" when a trace frame is + # selected. - gdb_test "tfind -1" ".*" "" - gdb_test_no_output "set print entry-values only" "" - gdb_test "tfind 0" \ - " \\(argc@entry=\[^,\]*, argi@entry=\[^,\]*, argf@entry=\[^,\]*, argd@entry=\[^,\]*, argstruct@entry=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \ - "collect $msg: tfind 0 with entry-values only" + with_test_prefix "entry-values only" { + gdb_test "tfind -1" ".*" + gdb_test_no_output "set print entry-values only" + gdb_test "tfind 0" \ + " \\(argc@entry=\[^,\]*, argi@entry=\[^,\]*, argf@entry=\[^,\]*, argd@entry=\[^,\]*, argstruct@entry=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \ + "tfind 0 with entry-values only" + } - gdb_test "tfind -1" ".*" "" - gdb_test_no_output "set print entry-values both" "" - gdb_test "tfind 0" \ - " \\(argc=\[^,\]*, argc@entry=\[^,\]*, argi=\[^,\]*, argi@entry=\[^,\]*, argf=\[^,\]*, argf@entry=\[^,\]*, argd=\[^,\]*, argd@entry=\[^,\]*, argstruct=\[^,\]*, argstruct@entry=\[^,\]*, argarray=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \ - "collect $msg: tfind 0 with entry-values both" + with_test_prefix "entry-values both" { + gdb_test "tfind -1" ".*" "" + gdb_test_no_output "set print entry-values both" "" + gdb_test "tfind 0" \ + " \\(argc=\[^,\]*, argc@entry=\[^,\]*, argi=\[^,\]*, argi@entry=\[^,\]*, argf=\[^,\]*, argf@entry=\[^,\]*, argd=\[^,\]*, argd@entry=\[^,\]*, argstruct=\[^,\]*, argstruct@entry=\[^,\]*, argarray=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \ + "tfind 0 with entry-values both" + } - gdb_test "print argc" \ + gdb_test "print argc" \ "\\$\[0-9\]+ = 1 '.001'$cr" \ - "collect $msg: collected arg char" - gdb_test "print argi" \ + "collected arg char" + gdb_test "print argi" \ "\\$\[0-9\]+ = 2$cr" \ - "collect $msg: collected arg int" - gdb_test "print argf" \ + "collected arg int" + gdb_test "print argf" \ "\\$\[0-9\]+ = 3.\[23\]\[0-9\]*$cr" \ - "collect $msg: collected arg float" - gdb_test "print argd" \ + "collected arg float" + gdb_test "print argd" \ "\\$\[0-9\]+ = 4.\[34\]\[0-9\]*$cr" \ - "collect $msg: collected arg double" + "collected arg double" - # struct arg as one of several args (near end of list) - gdb_test "print argstruct.memberc" \ + # struct arg as one of several args (near end of list) + gdb_test "print argstruct.memberc" \ "\\$\[0-9\]+ = 101 'e'$cr" \ - "collect $msg: collected arg struct member char" - gdb_test "print argstruct.memberi" \ + "collected arg struct member char" + gdb_test "print argstruct.memberi" \ "\\$\[0-9\]+ = 102$cr" \ - "collect $msg: collected arg struct member int" - gdb_test "print argstruct.memberf" \ + "collected arg struct member int" + gdb_test "print argstruct.memberf" \ "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \ - "collect $msg: collected arg struct member float" - gdb_test "print argstruct.memberd" \ + "collected arg struct member float" + gdb_test "print argstruct.memberd" \ "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \ - "collect $msg: collected arg struct member double" + "collected arg struct member double" - # array arg as one of several args (near end of list) + # array arg as one of several args (near end of list) - # It isn't clear why is the test assuming the array's elements are - # collected. In C, an array as function parameters is a special - # case; it's just a pointer into the caller's array, and as such, - # that's what normally the debug info describes. Maybe this was - # originaly written for a compiler where array parameters were - # really described as arrays in debug info. + # It isn't clear why is the test assuming the array's elements are + # collected. In C, an array as function parameters is a special + # case; it's just a pointer into the caller's array, and as such, + # that's what normally the debug info describes. Maybe this was + # originaly written for a compiler where array parameters were + # really described as arrays in debug info. - setup_xfail "*-*-*" - gdb_test "print argarray\[0\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[0\]" \ "\\$\[0-9\]+ = 111$cr" \ - "collect $msg: collected argarray #0" + "collected argarray #0" - setup_xfail "*-*-*" - gdb_test "print argarray\[1\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[1\]" \ "\\$\[0-9\]+ = 112$cr" \ - "collect $msg: collected argarray #1" + "collected argarray #1" - setup_xfail "*-*-*" - gdb_test "print argarray\[2\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[2\]" \ "\\$\[0-9\]+ = 113$cr" \ - "collect $msg: collected argarray #2" + "collected argarray #2" - setup_xfail "*-*-*" - gdb_test "print argarray\[3\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[3\]" \ "\\$\[0-9\]+ = 114$cr" \ - "collect $msg: collected argarray #3" + "collected argarray #3" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } proc gdb_collect_argstruct_test { myargs msg } { global cr global gdb_prompt - prepare_for_trace_test + with_test_prefix "collect $msg" { + prepare_for_trace_test - gdb_test "trace argstruct_test_func" \ + gdb_test "trace argstruct_test_func" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $myargs" "^$" - # Begin the test. - run_trace_experiment $msg argstruct_test_func + # Begin the test. + run_trace_experiment argstruct_test_func - # struct argument as only argument - gdb_test "print argstruct.memberc" \ + # struct argument as only argument + gdb_test "print argstruct.memberc" \ "\\$\[0-9\]+ = 101 'e'$cr" \ - "collect $msg: collected arg struct member char" - gdb_test "print argstruct.memberi" \ + "collected arg struct member char" + gdb_test "print argstruct.memberi" \ "\\$\[0-9\]+ = 102$cr" \ - "collect $msg: collected arg struct member int" - gdb_test "print argstruct.memberf" \ + "collected arg struct member int" + gdb_test "print argstruct.memberf" \ "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \ - "collect $msg: collected arg struct member float" - gdb_test "print argstruct.memberd" \ + "collected arg struct member float" + gdb_test "print argstruct.memberd" \ "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \ - "collect $msg: collected arg struct member double" + "collected arg struct member double" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } @@ -231,50 +236,53 @@ proc gdb_collect_argarray_test { myargs msg } { global cr global gdb_prompt - prepare_for_trace_test + with_test_prefix "collect $msg" { - gdb_test "trace argarray_test_func" \ + prepare_for_trace_test + + gdb_test "trace argarray_test_func" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $myargs" "^$" - # Begin the test. - run_trace_experiment $msg argarray_test_func + # Begin the test. + run_trace_experiment argarray_test_func - # array arg as only argument + # array arg as only argument - # It isn't clear why is the test assuming the array's elements are - # collected. In C, an array as function parameters is a special - # case; it's just a pointer into the caller's array, and as such, - # that's what normally the debug info describes. Maybe this was - # originaly written for a compiler where array parameters were - # really described as arrays in debug info. + # It isn't clear why is the test assuming the array's elements + # are collected. In C, an array as function parameters is a + # special case; it's just a pointer into the caller's array, + # and as such, that's what normally the debug info describes. + # Maybe this was originaly written for a compiler where array + # parameters were really described as arrays in debug info. - setup_xfail "*-*-*" - gdb_test "print argarray\[0\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[0\]" \ "\\$\[0-9\]+ = 111$cr" \ - "collect $msg: collected argarray #0" + "collected argarray #0" - setup_xfail "*-*-*" - gdb_test "print argarray\[1\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[1\]" \ "\\$\[0-9\]+ = 112$cr" \ - "collect $msg: collected argarray #1" + "collected argarray #1" - setup_xfail "*-*-*" - gdb_test "print argarray\[2\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[2\]" \ "\\$\[0-9\]+ = 113$cr" \ - "collect $msg: collected argarray #2" + "collected argarray #2" - setup_xfail "*-*-*" - gdb_test "print argarray\[3\]" \ + setup_xfail "*-*-*" + gdb_test "print argarray\[3\]" \ "\\$\[0-9\]+ = 114$cr" \ - "collect $msg: collected argarray #3" + "collected argarray #3" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } @@ -282,78 +290,79 @@ proc gdb_collect_locals_test { func mylocs msg } { global cr global gdb_prompt - prepare_for_trace_test - - # Find the comment-identified line for setting this tracepoint. - set testline 0 - gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" { - -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { - set testline $expect_out(1,string) - pass "collect $msg: find tracepoint line" + with_test_prefix "collect $msg" { + prepare_for_trace_test + + # Find the comment-identified line for setting this tracepoint. + set testline 0 + gdb_test_multiple "list $func, +30" "find tracepoint line" { + -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { + set testline $expect_out(1,string) + pass $gdb_test_name + } + -re ".*$gdb_prompt " { + fail "$gdb_test_name (skipping locals test)" + return + } + timeout { + fail "$gdb_test_name (skipping locals test)" + return + } } - -re ".*$gdb_prompt " { - fail "collect $msg: find tracepoint line (skipping locals test)" - return - } - timeout { - fail "collect $msg: find tracepoint line (skipping locals test)" - return - } - } - gdb_test "trace $testline" \ + gdb_test "trace $testline" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $mylocs" "^$" - # Begin the test. - run_trace_experiment $msg $func + # Begin the test. + run_trace_experiment $func - gdb_test "print locc" \ - "\\$\[0-9\]+ = 11 '.\[a-z0-7\]+'$cr" \ - "collect $msg: collected local char" - gdb_test "print loci" \ + gdb_test "print locc" \ + "\\$\[0-9\]+ = 11 '.\[a-z0-7\]+'$cr" \ + "collected local char" + gdb_test "print loci" \ "\\$\[0-9\]+ = 12$cr" \ - "collect $msg: collected local int" - gdb_test "print locf" \ + "collected local int" + gdb_test "print locf" \ "\\$\[0-9\]+ = 13.\[23\]\[0-9\]*$cr" \ - "collect $msg: collected local float" - gdb_test "print locd" \ + "collected local float" + gdb_test "print locd" \ "\\$\[0-9\]+ = 14.\[34\]\[0-9\]*$cr" \ - "collect $msg: collected local double" + "collected local double" - gdb_test "print locst.memberc" \ + gdb_test "print locst.memberc" \ "\\$\[0-9\]+ = 15 '.017'$cr" \ - "collect $msg: collected local member char" - gdb_test "print locst.memberi" \ + "collected local member char" + gdb_test "print locst.memberi" \ "\\$\[0-9\]+ = 16$cr" \ - "collect $msg: collected local member int" - gdb_test "print locst.memberf" \ + "collected local member int" + gdb_test "print locst.memberf" \ "\\$\[0-9\]+ = 17.\[67\]\[0-9\]*$cr" \ - "collect $msg: collected local member float" - gdb_test "print locst.memberd" \ + "collected local member float" + gdb_test "print locst.memberd" \ "\\$\[0-9\]+ = 18.\[78\]\[0-9\]*$cr" \ - "collect $msg: collected local member double" + "collected local member double" - gdb_test "print locar\[0\]" \ + gdb_test "print locar\[0\]" \ "\\$\[0-9\]+ = 121$cr" \ - "collect $msg: collected locarray #0" - gdb_test "print locar\[1\]" \ + "collected locarray #0" + gdb_test "print locar\[1\]" \ "\\$\[0-9\]+ = 122$cr" \ - "collect $msg: collected locarray #1" - gdb_test "print locar\[2\]" \ + "collected locarray #1" + gdb_test "print locar\[2\]" \ "\\$\[0-9\]+ = 123$cr" \ - "collect $msg: collected locarray #2" - gdb_test "print locar\[3\]" \ + "collected locarray #2" + gdb_test "print locar\[3\]" \ "\\$\[0-9\]+ = 124$cr" \ - "collect $msg: collected locarray #3" - + "collected locarray #3" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } proc gdb_collect_registers_test { myregs } { @@ -363,26 +372,28 @@ proc gdb_collect_registers_test { myregs } { global spreg global pcreg - prepare_for_trace_test + with_test_prefix "collect $myregs" { + prepare_for_trace_test - # We'll simply re-use the args_test_function for this test - gdb_test "trace args_test_func" \ + # We'll simply re-use the args_test_function for this test + gdb_test "trace args_test_func" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $myregs: set tracepoint" - gdb_trace_setactions "collect $myregs: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $myregs" "^$" - # Begin the test. - run_trace_experiment $myregs args_test_func + # Begin the test. + run_trace_experiment args_test_func - test_register "\$$fpreg" $myregs - test_register "\$$spreg" $myregs - test_register "\$$pcreg" $myregs + test_register "\$$fpreg" $myregs + test_register "\$$spreg" $myregs + test_register "\$$pcreg" $myregs - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $myregs: cease trace debugging" + "cease trace debugging" + } } proc gdb_collect_expression_test { func expr val msg } { @@ -391,83 +402,86 @@ proc gdb_collect_expression_test { func expr val msg } { prepare_for_trace_test - # Find the comment-identified line for setting this tracepoint. - set testline 0 - gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" { - -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { - set testline $expect_out(1,string) - pass "collect $msg: find tracepoint line" + with_test_prefix "collect $msg" { + # Find the comment-identified line for setting this tracepoint. + set testline 0 + gdb_test_multiple "list $func, +30" "find tracepoint line" { + -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { + set testline $expect_out(1,string) + pass $gdb_test_name + } + -re ".*$gdb_prompt " { + pass "$gdb_test_name (skipping locals test)" + return + } + timeout { + pass "$gdb_test_name (skipping locals test)" + return + } } - -re ".*$gdb_prompt " { - fail "collect $msg: find tracepoint line (skipping locals test)" - return - } - timeout { - fail "collect $msg: find tracepoint line (skipping locals test)" - return - } - } - gdb_test "trace $testline" \ + gdb_test "trace $testline" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect $expr" "^$" - # Begin the test. - run_trace_experiment $msg $func + # Begin the test. + run_trace_experiment $func - gdb_test "print $expr" \ + gdb_test "print $expr" \ "\\$\[0-9\]+ = $val$cr" \ - "collect $msg: got expected value '$val'" + "got expected value '$val'" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } proc gdb_collect_globals_test { } { global cr global gdb_prompt - prepare_for_trace_test - - # Find the comment-identified line for setting this tracepoint. - set testline 0 - gdb_test_multiple "list globals_test_func, +30" "collect globals: find tracepoint line" { - -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { - set testline $expect_out(1,string) - pass "collect globals: find tracepoint line" - } - -re ".*$gdb_prompt " { - fail "collect globals: find tracepoint line (skipping global test)" - return + with_test_prefix "collect globals" { + prepare_for_trace_test + + # Find the comment-identified line for setting this tracepoint. + set testline 0 + gdb_test_multiple "list globals_test_func, +30" "find tracepoint line" { + -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { + set testline $expect_out(1,string) + pass $gdb_test_name + } + -re ".*$gdb_prompt " { + fail "$gdb_test_name (skipping global test)" + return + } + timeout { + fail "$gdb_test_name (skipping global test)" + return + } } - timeout { - fail "collect globals: find tracepoint line (skipping global test)" - return - } - } - # Use use this to test collecting overlapping memory ranges - # (making use of UNOP_MEMVAL, as objects don't usually overlap - # other objects). Note that globalarr2 should not be collected in - # any other way so that a regression test below can be effective. - - set globalarr2_addr "" - set test "get address of globalarr2" - gdb_test_multiple "p /x &globalarr2" $test { - -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" { - set globalarr2_addr $expect_out(1,string) - pass $test + # Use use this to test collecting overlapping memory ranges + # (making use of UNOP_MEMVAL, as objects don't usually overlap + # other objects). Note that globalarr2 should not be collected in + # any other way so that a regression test below can be effective. + + set globalarr2_addr "" + set test "get address of globalarr2" + gdb_test_multiple "p /x &globalarr2" $test { + -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" { + set globalarr2_addr $expect_out(1,string) + pass $test + } } - } - gdb_test "trace $testline" \ + gdb_test "trace $testline" \ "Tracepoint \[0-9\]+ at .*" \ - "collect globals: set tracepoint" - gdb_trace_setactions "collect globals: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect globalc, globali, globalf, globald" "^$" \ "collect globalstruct, globalp, globalarr" "^$" \ @@ -475,66 +489,67 @@ proc gdb_collect_globals_test { } { "collect \{int \[2\]\}$globalarr2_addr" "^$" \ "collect \{int \[4\]\}globalarr3" "^$" - # Begin the test. - run_trace_experiment "globals" globals_test_func + # Begin the test. + run_trace_experiment globals_test_func - gdb_test "print globalc" \ + gdb_test "print globalc" \ "\\$\[0-9\]+ = 71 'G'$cr" \ - "collect globals: collected global char" - gdb_test "print globali" \ + "collected global char" + gdb_test "print globali" \ "\\$\[0-9\]+ = 72$cr" \ - "collect globals: collected global int" - gdb_test "print globalf" \ + "collected global int" + gdb_test "print globalf" \ "\\$\[0-9\]+ = 73.\[23\]\[0-9\]*$cr" \ - "collect globals: collected global float" - gdb_test "print globald" \ + "collected global float" + gdb_test "print globald" \ "\\$\[0-9\]+ = 74.\[34\]\[0-9\]*$cr" \ - "collect globals: collected global double" + "collected global double" - gdb_test "print globalstruct.memberc" \ + gdb_test "print globalstruct.memberc" \ "\\$\[0-9\]+ = 81 'Q'$cr" \ - "collect globals: collected struct char member" - gdb_test "print globalstruct.memberi" \ + "collected struct char member" + gdb_test "print globalstruct.memberi" \ "\\$\[0-9\]+ = 82$cr" \ - "collect globals: collected struct member int" - gdb_test "print globalstruct.memberf" \ + "collected struct member int" + gdb_test "print globalstruct.memberf" \ "\\$\[0-9\]+ = 83.\[23\]\[0-9\]*$cr" \ - "collect globals: collected struct member float" - gdb_test "print globalstruct.memberd" \ + "collected struct member float" + gdb_test "print globalstruct.memberd" \ "\\$\[0-9\]+ = 84.\[34\]\[0-9\]*$cr" \ - "collect globals: collected struct member double" + "collected struct member double" - gdb_test "print globalp == &globalstruct" \ + gdb_test "print globalp == &globalstruct" \ "\\$\[0-9\]+ = 1$cr" \ - "collect globals: collected global pointer" + "collected global pointer" - gdb_test "print globalarr\[1\]" \ + gdb_test "print globalarr\[1\]" \ "\\$\[0-9\]+ = 1$cr" \ - "collect globals: collected global array element #1" - gdb_test "print globalarr\[2\]" \ + "collected global array element #1" + gdb_test "print globalarr\[2\]" \ "\\$\[0-9\]+ = 2$cr" \ - "collect globals: collected global array element #2" - gdb_test "print globalarr\[3\]" \ + "collected global array element #2" + gdb_test "print globalarr\[3\]" \ "\\$\[0-9\]+ = 3$cr" \ - "collect globals: collected global array element #3" - - # Check that we didn't mess up sort&merging memory ranges to - # collect. - gdb_test "print globalarr2" \ - "\\$\[0-9\]+ = \\{0, 1, 2, 3\\}$cr" \ - "collect globals: collected global array 2" - - # GDB would internal error collecting UNOP_MEMVAL's whose address - # expression wasn't an rvalue (that's regtested in the - # corresponding 'collect' action above). This just double checks - # we actually did collect what we wanted. - gdb_test "print globalarr3" \ - "\\$\[0-9\]+ = \\{3, 2, 1, 0\\}$cr" \ - "collect globals: collected global array 3" - - gdb_test "tfind none" \ + "collected global array element #3" + + # Check that we didn't mess up sort&merging memory ranges to + # collect. + gdb_test "print globalarr2" \ + "\\$\[0-9\]+ = \\{0, 1, 2, 3\\}$cr" \ + "collected global array 2" + + # GDB would internal error collecting UNOP_MEMVAL's whose address + # expression wasn't an rvalue (that's regtested in the + # corresponding 'collect' action above). This just double checks + # we actually did collect what we wanted. + gdb_test "print globalarr3" \ + "\\$\[0-9\]+ = \\{3, 2, 1, 0\\}$cr" \ + "collect globals: collected global array 3" + + gdb_test "tfind none" \ "#0 end .*" \ - "collect globals: cease trace debugging" + "cease trace debugging" + } } # Test that when we've collected all fields of a structure @@ -542,75 +557,78 @@ proc gdb_collect_globals_test { } { proc gdb_collect_global_in_pieces_test { } { global gdb_prompt - prepare_for_trace_test + with_test_prefix "collect global in pieces" { + prepare_for_trace_test - # Find the comment-identified line for setting this tracepoint. - set testline 0 - set msg "collect global in pieces: find tracepoint line" - gdb_test_multiple "list globals_test_func, +30" "$msg" { - -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { - set testline $expect_out(1,string) - pass "$msg" + # Find the comment-identified line for setting this tracepoint. + set testline 0 + gdb_test_multiple "list globals_test_func, +30" "find tracepoint line" { + -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { + set testline $expect_out(1,string) + pass $gdb_test_name + } } - } - if {$testline == 0} { - return - } + if {$testline == 0} { + return + } - gdb_test "trace $testline" \ - "Tracepoint \[0-9\]+ at .*" \ - "collect global in pieces: set tracepoint" - gdb_trace_setactions "collect global in pieces: define actions" \ + gdb_test "trace $testline" \ + "Tracepoint \[0-9\]+ at .*" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect global_pieces.a, global_pieces.b" \ "^$" - # Begin the test. - run_trace_experiment "global in pieces" globals_test_func + # Begin the test. + run_trace_experiment globals_test_func - gdb_test "print /x global_pieces.a" " = 0x12345678" \ - "collect global in pieces: print piece a" - gdb_test "print /x global_pieces.b" " = 0x87654321" \ - "collect global in pieces: print piece b" + gdb_test "print /x global_pieces.a" " = 0x12345678" \ + "print piece a" + gdb_test "print /x global_pieces.b" " = 0x87654321" \ + "print piece b" - gdb_test "print /x global_pieces" " = \{a = 0x12345678, b = 0x87654321\}" \ - "collect global in pieces: print whole object" + gdb_test "print /x global_pieces" " = \{a = 0x12345678, b = 0x87654321\}" \ + "print whole object" - gdb_test "tfind none" "#0 end .*" \ - "collect global in pieces: cease trace debugging" + gdb_test "tfind none" "#0 end .*" \ + "cease trace debugging" + } } proc gdb_collect_return_test { } { global gdb_prompt - prepare_for_trace_test + with_test_prefix "collect \$_ret" { + prepare_for_trace_test - # We'll simply re-use the args_test_function for this test - gdb_test "trace args_test_func" \ + # We'll simply re-use the args_test_function for this test. + gdb_test "trace args_test_func" \ "Tracepoint \[0-9\]+ at .*" \ - "collect \$_ret: set tracepoint" - gdb_trace_setactions "collect \$_ret: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect \$_ret" "^$" - # Begin the test. - run_trace_experiment \$_ret args_test_func - - # Since we can't guarantee that $_ret will give us the caller, - # pass either way, but giving different messages. - gdb_test_multiple "backtrace" "" { - -re ".*#1 .* in main .*\r\n$gdb_prompt $" { - pass "collect \$_ret: backtrace lists main" - } - -re ".*#1 .* in ?? .*\r\n$gdb_prompt $" { - pass "collect \$_ret: backtrace not listing main" + # Begin the test. + run_trace_experiment args_test_func + + # Since we can't guarantee that $_ret will give us the caller, + # pass either way, but giving different messages. + gdb_test_multiple "backtrace" "" { + -re ".*#1 .* in main .*\r\n$gdb_prompt $" { + pass "$gdb_test_name (lists main)" + } + -re ".*#1 .* in ?? .*\r\n$gdb_prompt $" { + pass "$gdb_test_name (not listing main)" + } } - } - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect \$_ret: cease trace debugging" + "cease trace debugging" + } } proc gdb_collect_strings_test { func mystr myrslt mylim msg } { @@ -618,42 +636,44 @@ proc gdb_collect_strings_test { func mystr myrslt mylim msg } { global cr global gdb_prompt - prepare_for_trace_test - - # Find the comment-identified line for setting this tracepoint. - set testline 0 - gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" { - -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { - set testline $expect_out(1,string) - pass "collect $msg: find tracepoint line" - } - -re ".*$gdb_prompt " { - fail "collect $msg: find tracepoint line (skipping strings test)" - return + with_test_prefix "collect $msg" { + prepare_for_trace_test + + # Find the comment-identified line for setting this tracepoint. + set testline 0 + gdb_test_multiple "list $func, +30" "find tracepoint line" { + -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" { + set testline $expect_out(1,string) + pass $gdb_test_name + } + -re ".*$gdb_prompt " { + pass "$gdb_test_name (skipping strings test)" + return + } + timeout { + pass "$gdb_test_name (skipping strings test)" + return + } } - timeout { - fail "collect $msg: find tracepoint line (skipping strings test)" - return - } - } - gdb_test "trace $testline" \ + gdb_test "trace $testline" \ "Tracepoint \[0-9\]+ at .*" \ - "collect $msg: set tracepoint" - gdb_trace_setactions "collect $msg: define actions" \ + "set tracepoint" + gdb_trace_setactions "define actions" \ "" \ "collect/s$mylim $mystr" "^$" - # Begin the test. - run_trace_experiment $msg $func + # Begin the test. + run_trace_experiment $func - gdb_test "print $mystr" \ - "\\$\[0-9\]+ = $hex \"$myrslt\".*$cr" \ - "collect $msg: collected local string" + gdb_test "print $mystr" \ + "\\$\[0-9\]+ = $hex \"$myrslt\".*$cr" \ + "collected local string" - gdb_test "tfind none" \ + gdb_test "tfind none" \ "#0 end .*" \ - "collect $msg: cease trace debugging" + "cease trace debugging" + } } proc gdb_trace_collection_test {} { @@ -785,4 +805,4 @@ if { ![gdb_target_supports_trace] } then { gdb_trace_collection_test # Finished! -gdb_test "tfind none" ".*" "" +gdb_test "tfind none" ".*" |