# Copyright (C) 2008, 2010 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 use of unwindonsignal when a hand function call that gets interrupted
# by a signal in another thread.

set NR_THREADS 4

if $tracelevel then {
	strace $tracelevel
}

set testfile "interrupted-hand-call"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}" "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
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${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.

# Do turn on unwindonsignal.
# We want to test gdb handling of the current thread changing when
# unwindonsignal is in effect.
gdb_test "set unwindonsignal on" \
	"" \
	"setting unwindonsignal"
gdb_test "show unwindonsignal" \
	"Unwinding of stack .* is on." \
	"showing unwindonsignal"

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

# Verify dummy stack frame is still present.
# ??? Should unwindonsignal still apply even if the program stops
# because of a signal in another thread?

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

# GDB 6.8 would perform the unwindonsignal, but on the thread that stopped,
# not the thread with the hand-called function.
# This is tested by verifying only one thread has main in its backtrace.

gdb_test_multiple "thread apply all bt" "wrong thread not unwound" {
    -re ".* in main .* in main .*$gdb_prompt $" {
	fail "wrong thread not unwound"
    }
    -re ".* in main .*$gdb_prompt $" {
	pass "wrong thread not unwound"
    }
}

# 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_test "continue" "Program exited normally." \
    "continue to program exit"

return 0
