| # This testcase is part of GDB, the GNU debugger. | |
| # | |
| # Copyright 2013-2023 Free Software Foundation, Inc. | |
| # | |
| # Contributed by Intel Corp. <christian.himpel@intel.com> | |
| # | |
| # 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 <http://www.gnu.org/licenses/>. | |
| require allow_btrace_tests | |
| # start fresh - without an executable | |
| gdb_exit | |
| gdb_start | |
| # record cannot be stopped, if it was never active | |
| gdb_test "record stop" "No recording is currently active\\..*" "record stop without target" | |
| # btrace cannot be enabled without a running inferior | |
| gdb_test "record btrace" "The program is not being run\\." "record btrace without running program" | |
| # no function and no instruction history without btrace enabled | |
| gdb_test "record function-call-history" "No recording is currently active\\..*" "record function-call-history without target" | |
| gdb_test "record instruction-history" "No recording is currently active\\..*" "record instruction-history without target" | |
| gdb_test "info record" "No recording is currently active\\." "info record without target" | |
| standard_testfile | |
| if [prepare_for_testing "failed to prepare" $testfile {} {debug}] { | |
| return -1 | |
| } | |
| if ![runto_main] { | |
| return -1 | |
| } | |
| # enable btrace | |
| gdb_test_no_output "record btrace" "record btrace" | |
| gdb_test "record function-call-history" "No trace\\." "record function-call-history without trace" | |
| gdb_test "record instruction-history" "No trace\\." "record instruction-history without trace" | |
| # btrace cannot be enabled twice | |
| gdb_test "record btrace" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record btrace the second time" | |
| # full record cannot be activated as long as btrace is active | |
| gdb_test "record full" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record full cannot be enabled" | |
| # no trace recorded yet | |
| gdb_test "info record" "Active record target: record-btrace\r | |
| .*\r | |
| Recorded 0 instructions in 0 functions \\\(0 gaps\\\) for thread 1.*\\." "info record without trace" | |
| # stop btrace record | |
| gdb_test "record stop" "Process record is stopped and all execution logs are deleted\\." | |
| gdb_test "record stop" "No recording is currently active\\..*" "record stop the second time" | |
| # enable btrace again | |
| gdb_test_no_output "record btrace" "record btrace re-enable" | |
| gdb_test "record btrace" "The process is already being recorded\\. Use \"record stop\" to stop recording first\\." "record btrace re-enable twice" | |
| # continue to the end and make sure we don't die | |
| gdb_test "continue" ".*Inferior.*exited.*" "continue to end" | |
| # allow_gdbserver_tests requires GDB not running. | |
| gdb_exit | |
| # skip the rerun test when using gdbserver | |
| # otherwise rerun twice, target should be automatically disabled | |
| load_lib gdbserver-support.exp | |
| require allow_gdbserver_tests | |
| clean_restart $testfile | |
| if ![runto_main] { | |
| return -1 | |
| } | |
| if ![runto_main] { | |
| return -1 | |
| } | |
| # make sure record-btrace can be enabled after re-run | |
| clean_restart $testfile | |
| if ![runto_main] { | |
| return -1 | |
| } | |
| gdb_test_no_output "record btrace" "enable after restart" | |
| if ![runto_main] { | |
| return -1 | |
| } | |
| gdb_test_no_output "record btrace" "enable after re-run" |