# Copyright 2011-2023 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 # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . load_lib "trace-support.exp" standard_testfile set executable $testfile set expfile $testfile.exp if [prepare_for_testing "failed to prepare" $executable $srcfile \ {debug nowarnings}] { return -1 } if ![runto_main] { return -1 } if ![gdb_target_supports_trace] { unsupported "target does not support trace" return -1 } # Verify that the sequence of commands "tstart tstop tstart" works well. proc test_tstart_tstop_tstart { } { with_test_prefix "tstart_tstop_tstart" { global executable global hex # Start with a fresh gdb. clean_restart ${executable} if ![runto_main] { return -1 } gdb_test "trace func1" "Tracepoint \[0-9\] at $hex: file.*" gdb_test_no_output "tstart" gdb_breakpoint "end" qualified gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" \ "continue to end" gdb_test_no_output "tstop" gdb_test_no_output "tstart" } } # Verify the sequence of commands "tstart tstart" works well. proc test_tstart_tstart { } { with_test_prefix "tstart_tstart" { global executable global hex # Start with a fresh gdb. clean_restart ${executable} if ![runto_main] { return -1 } gdb_test "trace func1" "Tracepoint \[0-9\] at $hex: file.*" gdb_test_no_output "tstart" set test "tstart again" gdb_test_multiple "tstart" $test { -re "A trace is running already. Start a new run.*y or n.*" { # Send 'y' and make sure that we don't get any error. gdb_test_no_output "y" $test } } } } # Verify that trace stops clearly when trace buffer is full. proc test_buffer_full_tstart { } { with_test_prefix "buffer_full_tstart" { global executable global hex # Start with a fresh gdb. clean_restart ${executable} if ![runto_main] { return -1 } gdb_test "trace func2" "Tracepoint \[0-9\] at $hex: file.*" gdb_trace_setactions "collect buf: define actions" \ "" \ "collect buf" "^$" gdb_test_no_output "tstart" gdb_breakpoint "end" qualified gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end" gdb_test "tstatus" ".*buffer was full.*" gdb_test_no_output "tstart" } } test_tstart_tstop_tstart test_tstart_tstart test_buffer_full_tstart