| # Copyright 2022-2024 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 <http://www.gnu.org/licenses/>. |
| |
| # This file is part of the GDB testsuite. It tests the functionality of |
| # the maintenance print record-instruction command, but does not check the |
| # syntax, only if the command finds or fails to find recorded history. |
| # This is done by putting the inferior in mulpitle states with and without |
| # history to be printed, then checking if GDB is able to print an |
| # instruction or not. |
| # To identify if GDB has printed an instruction, we can see if some |
| # change is printed, since any instruction must have at least a change |
| # to the PC. |
| |
| if ![supports_reverse] { |
| return |
| } |
| |
| standard_testfile |
| |
| if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { |
| return -1 |
| } |
| |
| proc test_print { has_history level test_name } { |
| gdb_test_multiple "maint print record-instruction $level" $test_name { |
| -re -wrap ".*Not enough recorded history.*" { |
| gdb_assert !$has_history $test_name |
| } |
| |
| -re -wrap ".*changed.*" { |
| gdb_assert $has_history $test_name |
| } |
| } |
| } |
| |
| if { ![runto_main] } { |
| return 0 |
| } |
| |
| #confirm that GDB doesn't go crazy if recording isn't enabled |
| test_print false "" "print before starting to record" |
| |
| if ![supports_process_record] { |
| # No point in testing the rest if we can't record anything |
| return |
| } |
| |
| gdb_test_no_output "record" "turn on process record" |
| |
| test_print false "" "print before any instruction" |
| |
| gdb_test "stepi 3" ".*" "collecting history" |
| test_print true "" "print current after executing a bit" |
| test_print true "-1" "print previous after executing a bit" |
| test_print false "1" "print following after executing a bit" |
| |
| gdb_test "reverse-stepi" ".*" "moving back" |
| test_print true "" "print current after reversing" |
| test_print true "-1" "print previous after reversing" |
| test_print true "1" "print following after reversing" |
| |
| test_print false "-10" "trying to print too far back" |
| test_print false "10" "trying to print too far forward" |