| # This testcase is part of GDB, the GNU debugger. |
| # |
| # Copyright 2013-2021 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/>. |
| |
| if { [skip_btrace_tests] } { |
| unsupported "target does not support record-btrace" |
| return -1 |
| } |
| |
| # 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" |
| |
| # skip_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 |
| if [skip_gdbserver_tests] { |
| unsupported "target does not support gdbserver" |
| return 0 |
| } |
| 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" |