# Copyright (C) 2004, 2007-2008, 2010-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/>.

# Test recovering from a hand function call that gets interrupted
# by a signal in another thread.

set NR_THREADS 4

standard_testfile

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-DNR_THREADS=$NR_THREADS"]] != "" } {
    return -1
}

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

clean_restart ${binfile}

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

gdb_test "break all_threads_running" \
         "Breakpoint 2 at .*: file .*${srcfile}, line .*" \
         "breakpoint on all_threads_running"

# Run the program and make sure GDB reports that we stopped after
# hitting breakpoint 2 in all_threads_running().

gdb_test "continue" \
         ".*Breakpoint 2, all_threads_running ().*" \
         "run to all_threads_running"

# NOTE: Don't turn on scheduler-locking here.
# We want the main thread (hand_call_with_signal) and
# thread 1 (sigabrt_handler) to both run.

gdb_test "call hand_call_with_signal()" \
    ".*in another thread.*" \
    "hand-call interrupted by signal in another thread"

# Verify dummy stack frame is still present.

gdb_test "maint print dummy-frames" ".*stack=.*" "dummy stack frame present"

# Continuing now should exit the hand-call and pop the dummy frame.

gdb_test "continue" ".*" "finish hand-call"

gdb_test_multiple "maint print dummy-frames" "dummy frame popped" {
    -re ".*stack=.*$gdb_prompt $" {
	fail "dummy frame popped"
    }
    -re ".*$gdb_prompt $" {
	pass "dummy frame popped"
    }
}

# Continue one last time, the program should exit normally.

gdb_continue_to_end "" continue 1

return 0
