# Copyright (C) 2012-2021 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 . standard_testfile .c if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { return -1 } if ![runto_main] { return -1 } gdb_breakpoint [gdb_get_line_number "test-next"] temporary gdb_continue_to_breakpoint "test-next" ".* test-next .*" gdb_breakpoint [gdb_get_line_number "test-fail"] gdb_test_no_output {set $test_fail_bpnum=$bpnum} set test "test system longjmp tracking support" gdb_test_multiple "next" $test { -re " test-pass .*\r\n$gdb_prompt $" { pass $test } -re "( test-fail .*|\r\nCannot insert breakpoint 0\\.\r\n.*)\r\n$gdb_prompt $" { xfail $test untested "system lacks support for tracking longjmps" return -1 } } gdb_test_no_output {delete $test_fail_bpnum} gdb_breakpoint [gdb_get_line_number "break-run1"] gdb_breakpoint [gdb_get_line_number "break-run2"] gdb_breakpoint [gdb_get_line_number "break-exit"] gdb_breakpoint [gdb_get_line_number "break-fail"] gdb_continue_to_breakpoint "break-run1" ".* break-run1 .*" gdb_test "print infcall ()" " break-run2 .*The program being debugged stopped while in a function called from GDB\\..*When the function is done executing, GDB will silently stop\\." set test "stack corrupted" gdb_test_multiple "continue" $test { -re " break-exit .*\r\n$gdb_prompt $" { pass $test } -re " break-fail .*\r\n$gdb_prompt $" { fail $test } } gdb_test "bt" "#0 \[^\r\n\]* main \[^\r\n\]*" # Verify there are no remains of the dummy frame. gdb_test_no_output "maintenance print dummy-frames" set test "maintenance info breakpoints" gdb_test_multiple $test $test { -re " call dummy .*\r\n$gdb_prompt $" { fail $test } -re "\r\n$gdb_prompt $" { pass $test } }