# Copyright 2008-2020 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/>.

if [target_info exists gdb,nosignals] {
    verbose "Skipping unwindonsignal.exp because of nosignals."
    continue
}


# Some targets can't do function calls, so don't even bother with this
# test.
if [target_info exists gdb,cannot_call_functions] {
    unsupported "this target can not call functions"
    continue
}

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
    return -1
}

if { ![runto_main] } {
    fail "can't run to main"
    return 0
}

gdb_test "break stop_here" "Breakpoint \[0-9\]* at .*"
gdb_test "continue" "Continuing.*Breakpoint \[0-9\]*, stop_here.*" \
    "continue to breakpoint at stop_here"

# Turn on unwindonsignal.
gdb_test_no_output "set unwindonsignal on" \
	"setting unwindonsignal"

gdb_test "show unwindonsignal" \
	"Unwinding of stack .* is on." \
	"showing unwindonsignal"

# Call function (causing the program to get a signal), and see if gdb handles
# it properly.
if {[gdb_test "call gen_signal ()"  \
	 "\[\r\n\]*The program being debugged was signaled.*" \
	 "unwindonsignal, inferior function call signaled"] != 0} {
    return 0
}

# Verify the stack got unwound.
gdb_test "bt" \
    "#0 *\[x0-9a-f in\]*stop_here \\(.*\\) at .*#1 *\[x0-9a-f in\]*main \\(.*\\) at .*" \
	"unwindonsignal, stack unwound"

# Verify the dummy frame got removed from dummy_frame_stack.
gdb_test_multiple "maint print dummy-frames" \
	"unwindonsignal, dummy frame removed" {
    -re "\[\r\n\]*.*stack=.*code=.*\[\r\n\]+$gdb_prompt $" {
	fail "unwindonsignal, dummy frame removed"
    }
    -re "\[\r\n\]+$gdb_prompt $" {
	pass "unwindonsignal, dummy frame removed"
    }
}

return 0
