-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012-2020 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# Test of disconnected-tracing.
-load_lib "trace-support.exp";
+load_lib "trace-support.exp"
-set testfile "disconnected-tracing"
+standard_testfile
set executable $testfile
-set srcfile ${testfile}.c
-set binfile $objdir/$subdir/$testfile
set expfile $testfile.exp
set gdbserver_reconnect_p 1
return -1
}
-if [prepare_for_testing $expfile $executable $srcfile \
+if [prepare_for_testing "failed to prepare" $executable $srcfile \
{debug nowarnings}] {
- untested "failed to prepare for trace tests"
return -1
}
if ![gdb_target_supports_trace] {
unsupported "target does not support trace"
- return -1;
+ return -1
}
-delete_breakpoints
-gdb_test_no_output "set confirm off"
-gdb_test_no_output "set disconnected-tracing on"
-gdb_test "trace main" ".*"
-gdb_test_no_output "tstart"
+# Disconnect in tracing.
+
+proc disconnected_tracing { } {
+ with_test_prefix "trace" {
+ global executable
+ global decimal
+ global srcfile
+
+ # Start with a fresh gdb.
+ clean_restart ${executable}
+ if ![runto_main] {
+ fail "can't run to main"
+ return -1
+ }
+
+ gdb_test_no_output "set confirm off"
+ gdb_test_no_output "set disconnected-tracing on"
+ gdb_test "trace start" ".*"
+ gdb_trace_setactions "collect on tracepoint 2" "2" \
+ "collect foo" "^$"
+ gdb_breakpoint "end" qualified
+
+ gdb_test_no_output "tstart"
+
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*"
+ gdb_test_no_output "tstop"
+
+ gdb_test "info tracepoints" ".*in start at.*" \
+ "first info tracepoints"
+
+ gdb_test "disconnect" "Ending remote debugging\\." "first disconnect"
+ if { [gdb_reconnect] == 0 } {
+ pass "first reconnect after unload"
+ } else {
+ fail "first reconnect after unload"
+ return 0
+ }
+ gdb_test "info tracepoints" ".*in start at.*" \
+ "second info tracepoints"
-gdb_test "info tracepoints" ".*in main at.*" "first info tracepoints"
+ delete_breakpoints
+ gdb_test "info tracepoints" ".*No tracepoints..*" \
+ "third info tracepoints"
-gdb_test "disconnect" "Ending remote debugging\\." "first disconnect"
-if { [gdb_reconnect] == 0 } {
- pass "first reconnect after unload"
-} else {
- fail "first reconnect after unload"
- return 0
+ gdb_test "disconnect" "Ending remote debugging\\." "second disconnect"
+ if { [gdb_reconnect] == 0 } {
+ pass "second reconnect after unload"
+ } else {
+ fail "second reconnect after unload"
+ return 0
+ }
+ gdb_test "tstatus"
+ gdb_test "info tracepoints" \
+ "Num Type\[ \]+Disp Enb Address\[ \]+What.*
+\[0-9\]+\[\t \]+tracepoint keep y.* in start at .*$srcfile:\[0-9\]+.
+\[\t \]+tracepoint already hit 1 time.
+\[\t \]+trace buffer usage ${decimal} bytes.
+\[\t \]+collect foo.*" \
+ "fourth info tracepoints"
+ }
}
-gdb_test "info tracepoints" ".*in main at.*" "second info tracepoints"
-delete_breakpoints
-gdb_test "info tracepoints" ".*No tracepoints..*" "third info tracepoints"
+disconnected_tracing
-gdb_test "disconnect" "Ending remote debugging\\." "second disconnect"
-if { [gdb_reconnect] == 0 } {
- pass "second reconnect after unload"
-} else {
- fail "second reconnect after unload"
- return 0
+# Disconnected in tfind
+
+proc disconnected_tfind { } {
+ with_test_prefix "tfind" {
+ global executable
+ global decimal
+
+ # Start with a fresh gdb.
+ clean_restart ${executable}
+ if ![runto_main] {
+ fail "can't run to main"
+ return -1
+ }
+
+ gdb_test_no_output "set confirm off"
+ gdb_test_no_output "set disconnected-tracing on"
+ gdb_test "trace start" ".*"
+ gdb_test_no_output "tstart"
+
+ gdb_breakpoint "end" qualified
+ gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*"
+ gdb_test_no_output "tstop"
+
+ gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
+ gdb_test "p \$trace_frame" ".*\\\$${decimal} = 0.*" \
+ "p \$trace_frame before disconnected"
+ gdb_test "p \$tracepoint" ".*\\\$${decimal} = 2.*" \
+ "p \$tracepoint before disconnected"
+
+ gdb_test "disconnect" "Ending remote debugging\\." "first disconnect"
+
+ gdb_test "p \$trace_frame" ".*\\\$${decimal} = -1.*"
+ gdb_test "p \$tracepoint" ".*\\\$${decimal} = -1.*"
+ gdb_test "p \$trace_line" ".*\\\$${decimal} = -1.*"
+ gdb_test "p \$trace_file" ".*\\\$${decimal} = void.*"
+ gdb_test "p \$trace_func" ".*\\\$${decimal} = void.*"
+ }
}
-gdb_test "info tracepoints" ".*in main at.*" "fourth info tracepoints"
+disconnected_tfind
+
+# Reconnect for a clean gdbserver shutdown.
+gdb_reconnect