Index: gdb/testsuite/gdb.base/stale-infcall.exp |
diff --git a/gdb/testsuite/gdb.base/stale-infcall.exp b/gdb/testsuite/gdb.base/stale-infcall.exp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0aa8c2ae107767d1e1b02d76fb4b8ede78d70e71 |
--- /dev/null |
+++ b/gdb/testsuite/gdb.base/stale-infcall.exp |
@@ -0,0 +1,75 @@ |
+# Copyright (C) 2012 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/>. |
+ |
+set testfile stale-infcall |
+set srcfile ${testfile}.c |
+if { [prepare_for_testing $testfile.exp $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 |
+ } |
+} |