1# Copyright 2018-2020 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# Check that the selected stack frame doesn't change after a backtrace. 17 18standard_testfile 19 20if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } { 21 return -1 22} 23 24proc check_selected_frame_after_bt { bt_cmd stack_pattern } { 25 global binfile 26 27 clean_restart $binfile 28 29 with_test_prefix $bt_cmd { 30 31 if ![runto_main] then { 32 fail "can't run to main" 33 return 0 34 } 35 36 gdb_breakpoint "breakpt" 37 gdb_continue_to_breakpoint "breakpt" 38 39 # Visit each frame in the stack and ensure that the selected 40 # frame doesn't change after executing the backtrace command 41 # in BT_CMD. 42 foreach_with_prefix frame {0 1 2} { 43 if { $frame == 0 } { 44 gdb_assert {[get_current_frame_number] == $frame} \ 45 "check frame" 46 } else { 47 gdb_test "frame $frame" "#$frame .*" "select frame" 48 } 49 50 gdb_test "$bt_cmd" $stack_pattern \ 51 "perform backtrace command" 52 53 gdb_assert {[get_current_frame_number] == $frame} \ 54 "check frame is still selected" 55 } 56 } 57} 58 59check_selected_frame_after_bt "bt" \ 60 [multi_line \ 61 "#0 \[^\n\r\]+" \ 62 "#1 \[^\n\r\]+" \ 63 "#2 \[^\n\r\]+"] 64 65check_selected_frame_after_bt "bt full" \ 66 [multi_line \ 67 "#0 \[^\n\r\]+" \ 68 "No locals\." \ 69 "#1 \[^\n\r\]+" \ 70 "No locals\." \ 71 "#2 \[^\n\r\]+" \ 72 "No locals\."] 73