# Copyright (C) 2012-2013 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
    }
}
