| Index: gdb/testsuite/gdb.trace/pending.exp
|
| diff --git a/gdb/testsuite/gdb.trace/pending.exp b/gdb/testsuite/gdb.trace/pending.exp
|
| index 3b246c9e9a67e44216ad6e6f037915b498a7ccdc..750c0317c16e2a1b2ae0eaeea60a3117c0cde2a3 100644
|
| --- a/gdb/testsuite/gdb.trace/pending.exp
|
| +++ b/gdb/testsuite/gdb.trace/pending.exp
|
| @@ -14,24 +14,18 @@
|
|
|
| load_lib "trace-support.exp";
|
|
|
| -if $tracelevel then {
|
| - strace $tracelevel
|
| -}
|
| -
|
| if {[skip_shlib_tests]} {
|
| return 0
|
| }
|
|
|
| -set testfile "pending"
|
| +standard_testfile
|
| set libfile1 "pendshr1"
|
| set libfile2 "pendshr2"
|
| set executable $testfile
|
| -set srcfile $testfile.c
|
| set libsrc1 $srcdir/$subdir/$libfile1.c
|
| set libsrc2 $srcdir/$subdir/$libfile2.c
|
| -set binfile $objdir/$subdir/$testfile
|
| -set lib_sl1 $objdir/$subdir/$libfile1.sl
|
| -set lib_sl2 $objdir/$subdir/$libfile2.sl
|
| +set lib_sl1 [standard_output_file $libfile1.sl]
|
| +set lib_sl2 [standard_output_file $libfile2.sl]
|
|
|
| set lib_opts [gdb_target_symbol_prefix_flags]
|
|
|
| @@ -64,16 +58,12 @@ if ![gdb_target_supports_trace] {
|
|
|
| # Verify pending tracepoint is resolved to running to main.
|
|
|
| -proc pending_tracepoint_resolved { trace_type } {
|
| +proc pending_tracepoint_resolved { trace_type } { with_test_prefix "$trace_type resolved" {
|
| global srcdir
|
| global subdir
|
| global binfile
|
| global srcfile
|
| global lib_sl1
|
| - global pf_prefix
|
| -
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "resolved:"
|
|
|
| # Start with a fresh gdb.
|
| gdb_exit
|
| @@ -105,22 +95,16 @@ proc pending_tracepoint_resolved { trace_type } {
|
| "Num Type\[ \]+Disp Enb Address\[ \]+What.*
|
| \[0-9\]+\[\t \]+\(fast |\)tracepoint\[ \]+keep y.*pendfunc.*" \
|
| "single tracepoint info"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| # Verify pending tracepoint is resolved and works as expected.
|
|
|
| -proc pending_tracepoint_works { trace_type } {
|
| +proc pending_tracepoint_works { trace_type } { with_test_prefix "$trace_type works" {
|
| global executable
|
| global srcfile
|
| global lib_sl1
|
| - global pf_prefix
|
| global gdb_prompt
|
|
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "works:"
|
| -
|
| # Restart with a fresh gdb.
|
| clean_restart $executable
|
|
|
| @@ -146,46 +130,50 @@ proc pending_tracepoint_works { trace_type } {
|
| gdb_test "break marker" "Breakpoint.*at.* file .*$srcfile, line.*" \
|
| "breakpoint on marker"
|
|
|
| - gdb_test_no_output "tstart" "start trace experiment"
|
| -
|
| - gdb_test_multiple "continue" "continue to marker" {
|
| - -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| - pass "continue to marker"
|
| + set test "start trace experiment"
|
| + gdb_test_multiple "tstart" $test {
|
| + -re "^tstart\r\n$gdb_prompt $" {
|
| + pass $test
|
| }
|
| - -re ".*$gdb_prompt $" {
|
| - kfail "gdb/13392" "continue to marker"
|
| - set pf_prefix $old_pf_prefix
|
| - return
|
| + -re "Target returns error code .* too far .*$gdb_prompt $" {
|
| + if [string equal $trace_type "ftrace"] {
|
| + # The target was unable to install the fast tracepoint
|
| + # (e.g., jump pad too far from tracepoint).
|
| + pass "$test (too far)"
|
| + # Skip the rest of the tests.
|
| + return
|
| + } else {
|
| + fail $test
|
| + }
|
| }
|
| +
|
| }
|
|
|
| + gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*" \
|
| + "continue to marker"
|
| +
|
| gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
|
|
|
| gdb_test "tfind start" "#0 .*" "tfind test frame 0"
|
| gdb_test "tfind" "Found trace frame 1, tracepoint 1.*" "tfind test frame 1"
|
| gdb_test "tfind" "Found trace frame 2, tracepoint 1.*" "tfind test frame 2"
|
| gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| # Verify pending tracepoint is resolved during trace.
|
|
|
| -proc pending_tracepoint_resolved_during_trace { trace_type } {
|
| +proc pending_tracepoint_resolved_during_trace { trace_type } \
|
| +{ with_test_prefix "$trace_type resolved_in_trace" \
|
| +{
|
| global executable
|
| global srcfile
|
| global gdb_prompt
|
| global lib_sl1
|
| - global pf_prefix
|
| -
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "resolved_in_trace:"
|
|
|
| # Start with a fresh gdb.
|
| clean_restart $executable
|
| if ![runto_main] {
|
| fail "Can't run to main"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -209,14 +197,22 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {
|
| gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*pending.c.*" \
|
| "continue to marker 1"
|
|
|
| - gdb_test_multiple "continue" "continue to marker 2" {
|
| - -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| - pass "continue to marker 2"
|
| + set test "continue to marker 2"
|
| + gdb_test_multiple "continue" $test {
|
| + -re "Target returns error code .* too far .*$gdb_prompt $" {
|
| + if [string equal $trace_type "ftrace"] {
|
| + # Expected if the target was unable to install the
|
| + # fast tracepoint (e.g., jump pad too far from
|
| + # tracepoint).
|
| + pass "$test (too far)"
|
| + # Skip the rest of the tests.
|
| + return
|
| + } else {
|
| + fail $test
|
| + }
|
| }
|
| - -re ".*$gdb_prompt $" {
|
| - kfail "gdb/13392" "continue to marker 2"
|
| - set pf_prefix $old_pf_prefix
|
| - return
|
| + -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| + pass $test
|
| }
|
| }
|
|
|
| @@ -230,28 +226,23 @@ proc pending_tracepoint_resolved_during_trace { trace_type } {
|
|
|
| gdb_test "tfind start" "#0 .*" "tfind test frame 0"
|
| gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| # Verify pending tracepoint is resolved and installed during trace.
|
|
|
| -proc pending_tracepoint_installed_during_trace { trace_type } {
|
| +proc pending_tracepoint_installed_during_trace { trace_type } \
|
| +{ with_test_prefix "$trace_type installed_in_trace" \
|
| +{
|
| global executable
|
| global srcfile
|
| global lib_sl1
|
| global gdb_prompt
|
| - global pf_prefix
|
| global hex
|
|
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "installed_in_trace:"
|
| -
|
| # Start with a fresh gdb.
|
| clean_restart $executable
|
| if ![runto_main] {
|
| fail "Can't run to main"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -279,15 +270,23 @@ proc pending_tracepoint_installed_during_trace { trace_type } {
|
| \[0-9\]+\[\t \]+\(fast |\)tracepoint\[ \t\]+keep y.*PENDING.*set_point2.*" \
|
| "single pending tracepoint on set_point2"
|
|
|
| - gdb_test_multiple "continue" "continue to marker 2" {
|
| - -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| - pass "continue to marker 2"
|
| - }
|
| - -re ".*$gdb_prompt $" {
|
| - kfail "gdb/13392" "continue to marker 2"
|
| - set pf_prefix $old_pf_prefix
|
| - return
|
| + set test "continue to marker 2"
|
| + gdb_test_multiple "continue" $test {
|
| + -re "Target returns error code .* too far .*$gdb_prompt $" {
|
| + if [string equal $trace_type "ftrace"] {
|
| + # Expected if the target was unable to install the
|
| + # fast tracepoint (e.g., jump pad too far from
|
| + # tracepoint).
|
| + pass "$test (too far)"
|
| + # Skip the rest of the tests.
|
| + return
|
| + } else {
|
| + fail $test
|
| + }
|
| }
|
| + -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| + pass $test
|
| + }
|
| }
|
|
|
| gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
|
| @@ -300,28 +299,23 @@ proc pending_tracepoint_installed_during_trace { trace_type } {
|
|
|
| gdb_test "tfind start" "#0 $hex in pendfunc2 .*" "tfind test frame 0"
|
| gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
|
|
| # Verify pending tracepoint will no longer work if we disconnect during tracing.
|
|
|
| -proc pending_tracepoint_disconnect_during_trace { trace_type } {
|
| +proc pending_tracepoint_disconnect_during_trace { trace_type } \
|
| +{ with_test_prefix "$trace_type disconn" \
|
| +{
|
| global executable
|
| global srcfile
|
| global lib_sl1
|
| - global pf_prefix
|
| global gdb_prompt
|
|
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "disconn:"
|
| -
|
| # Start with a fresh gdb.
|
| clean_restart $executable
|
| if ![runto_main] {
|
| fail "Can't run to main"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -353,28 +347,23 @@ proc pending_tracepoint_disconnect_during_trace { trace_type } {
|
| }
|
| }
|
| }
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
|
|
| # Verify disconnect after pending tracepoint has been resolved.
|
|
|
| -proc pending_tracepoint_disconnect_after_resolved { trace_type } {
|
| +proc pending_tracepoint_disconnect_after_resolved { trace_type } \
|
| +{ with_test_prefix "$trace_type disconn_resolved" \
|
| +{
|
| global executable
|
| global srcfile
|
| global lib_sl1
|
| global gdb_prompt
|
| - global pf_prefix
|
| -
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "disconn_resolved:"
|
|
|
| # Start with a fresh gdb.
|
| clean_restart $executable
|
| if ![runto_main] {
|
| fail "Can't run to main"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -411,27 +400,22 @@ proc pending_tracepoint_disconnect_after_resolved { trace_type } {
|
| pass "$test"
|
| }
|
| }
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| # Verify action works properly in resolved tracepoint.
|
|
|
| -proc pending_tracepoint_with_action_resolved { trace_type } {
|
| +proc pending_tracepoint_with_action_resolved { trace_type } \
|
| +{ with_test_prefix "$trace_type action_resolved" \
|
| +{
|
| global executable
|
| global srcfile
|
| global lib_sl1
|
| global gdb_prompt
|
| - global pf_prefix
|
| -
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$trace_type" "action_resolved:"
|
|
|
| # Start with a fresh gdb.
|
| clean_restart $executable
|
| if ![runto_main] {
|
| fail "Can't run to main"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -465,15 +449,24 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
|
| gdb_test "continue" "Continuing.\r\n\r\nBreakpoint.*marker.*at.*pending.c.*" \
|
| "continue to marker 1"
|
|
|
| - gdb_test_multiple "continue" "continue to marker 2" {
|
| + set test "continue to marker 2"
|
| + gdb_test_multiple "continue" $test {
|
| + -re "Target returns error code .* too far .*$gdb_prompt $" {
|
| + if [string equal $trace_type "ftrace"] {
|
| + # Expected if the target was unable to install the
|
| + # fast tracepoint (e.g., jump pad too far from
|
| + # tracepoint).
|
| + pass "$test (too far)"
|
| + # Skip the rest of the tests.
|
| + return
|
| + } else {
|
| + fail $test
|
| + }
|
| + }
|
| -re "Continuing.\r\n\r\nBreakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
|
| pass "continue to marker 2"
|
| }
|
| - -re ".*$gdb_prompt $" {
|
| - kfail "gdb/13392" "continue to marker 2"
|
| - set pf_prefix $old_pf_prefix
|
| - return
|
| - }
|
| +
|
| }
|
|
|
| gdb_test "tstop" "\[\r\n\]+" "stop trace experiment"
|
| @@ -487,9 +480,7 @@ proc pending_tracepoint_with_action_resolved { trace_type } {
|
| gdb_test "tfind start" "#0 .*" "tfind test frame 0"
|
| gdb_test "tdump" "Data collected at tracepoint .*, trace frame \[0-9\]:.*\\$${pcreg} = .*"
|
| gdb_test "tfind" "Target failed to find requested trace frame..*" "tfind test frame"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| pending_tracepoint_resolved "trace"
|
|
|
| @@ -506,7 +497,7 @@ pending_tracepoint_with_action_resolved "trace"
|
| pending_tracepoint_installed_during_trace "trace"
|
|
|
| # Re-compile test case with IPA.
|
| -set libipa $objdir/../gdbserver/libinproctrace.so
|
| +set libipa [get_in_proc_agent]
|
| gdb_load_shlibs $libipa
|
|
|
| lappend exec_opts "shlib=$libipa"
|
|
|