# Copyright 1997-2018 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 signals.exp because of nosignals."
    continue
}


standard_testfile .c

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "failed to compile"
    return -1
}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info] {
    return -1
}

gdb_exit
gdb_start

# This will need to be updated as the exact list of signals changes,
# but I want to test that GDB_SIGNAL_0, GDB_SIGNAL_DEFAULT, and
# GDB_SIGNAL_UNKNOWN are skipped.

proc test_handle_all_print {} {
    global timeout
    # Increase timeout and expect input buffer for large output from gdb.
    # Allow blank or TAB as whitespace characters.
    set oldtimeout $timeout
    set timeout [expr "$timeout + 60"]
    verbose "Timeout is now $timeout seconds" 2
    if { ![istarget "*-*-linux*"]
         && ( [istarget "*-*-gnu*"]
              || [istarget "*-*-mach*"] ) } {
	gdb_test_sequence "handle all print" "" \
	    {
		"Signal\[ 	\]+Stop\[ 	\]+Print\[ 	\]+Pass to program\[ 	\]+Description\r\nSIGHUP\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Hangup"
		"SIG63\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Real-time event 63"
		"EXC_BREAKPOINT\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Breakpoint"
	    }
    } else {
	gdb_test_sequence "handle all print" "" \
	    {
		"Signal\[ 	\]+Stop\[ 	\]+Print\[ 	\]+Pass to program\[ 	\]+Description\r\nSIGHUP\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Hangup"
		"SIG63\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Real-time event 63"
	    }
    }
    set timeout $oldtimeout
    verbose "Timeout restored to $timeout seconds" 2
}
test_handle_all_print

clean_restart $binfile

if [runto_main] then {

    # Since count is a static variable outside main, runto_main is no
    # guarantee that count will be 0 at this point.

    gdb_test_no_output "set variable count = 0"

    # Test an inferior function call that takes a signal that hits a
    # breakpoint (with a false condition).  When GDB tries to run the
    # stack dummy, it will hit the breakpoint at handler.  Provided it
    # doesn't lose its cool, this is not a problem, it just has to
    # note that the breakpoint condition is false and keep going.

    # ...setup an always false conditional breakpoint

    gdb_test "break handler if 0" "Breakpoint \[0-9\]+ .*"
    gdb_test_no_output "set \$handler_breakpoint_number = \$bpnum"

    # ...setup the signal

    gdb_test "next" "signal \\(SIGUSR1.*" "next to signal"
    gdb_test "next" "alarm \\(.*" "next to alarm #1"
    gdb_test "next" "\\+\\+count; /\\* first \\*/" \
	"next to ++count #1"
    sleep 2

    # ...call the function

    gdb_test "p func1 ()" "^p func1 \\(\\)\r\n.\[0-9\]* = void" \
	"p func1 () #1"

    # ...veryfiy that the cout was updated

    gdb_test "p count" "= 2" "p count #1"

    # Now run the same test but with a breakpoint that does stop.

    # ...set up the breakpoint and signal

    gdb_test "condition \$handler_breakpoint_number" "now unconditional\\."
    gdb_test "next" "alarm \\(.*" "next to alarm #2"
    gdb_test "next" "\\+\\+count; /\\* second \\*/" \
	"next to ++count #2"
    sleep 2

    # ...call the function, which is immediatly interrupted

    gdb_test "p func1 ()" \
"Breakpoint \[0-9\]*, handler.*
The program being debugged stopped while in a function called from GDB.*" \
	"p func1 () #2"

    # ...verify the backtrace

    gdb_test "backtrace" \
	"#0  handler.*#1  .signal handler called.*#2  func1.*#3  .function called from gdb.*#4.*main.*" \
	"backtrace from handler when calling func1"

    # ...and continue (silently returning)

    gdb_test "continue" "Continuing\\."

    # ...and then count should have been incremented

    gdb_test "p count" "= 5" "p count #2"


    # Verify that "info signals" produces reasonable output.

    gdb_test "info signals" "SIGHUP.*SIGINT.*SIGQUIT.*SIGILL.*SIGTRAP.*SIGABRT.*SIGEMT.*SIGFPE.*SIGKILL.*SIGBUS.*SIGSEGV.*SIGSYS.*SIGPIPE.*SIGALRM.*SIGTERM.*SIGURG.*SIGSTOP.*SIGTSTP.*SIGCONT.*SIGCHLD.*SIGTTIN.*SIGTTOU.*SIGIO.*SIGXCPU.*SIGXFSZ.*SIGVTALRM.*SIGPROF.*SIGWINCH.*SIGLOST.*SIGUSR1.*SIGUSR2.*SIGPWR.*SIGPOLL.*SIGWIND.*SIGPHONE.*SIGWAITING.*SIGLWP.*SIGDANGER.*SIGGRANT.*SIGRETRACT.*SIGMSG.*SIGSOUND.*SIGSAK.*SIGPRIO.*SIG33.*SIG34.*SIG35.*SIG36.*SIG37.*SIG38.*SIG39.*SIG40.*SIG41.*SIG42.*SIG43.*SIG44.*SIG45.*SIG46.*SIG47.*SIG48.*SIG49.*SIG50.*SIG51.*SIG52.*SIG53.*SIG54.*SIG55.*SIG56.*SIG57.*SIG58.*SIG59.*SIG60.*SIG61.*SIG62.*SIG63.*Use the \"handle\" command to change these tables.*" \
	"info signals"

    # Verify that "info signal" correctly handles an argument, be it a
    # symbolic signal name, or an integer ID.

    gdb_test "info signal SIGTRAP" \
	"SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*" \
	"info signal SIGTRAP"

    gdb_test "info signal 5" \
	"SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*" \
	"info signal 5"

    # Verify that "handle" with illegal arguments is gracefully, um,
    # handled.

    gdb_test "handle" \
	"Argument required .signal to handle.*" \
	"handle without arguments"

    gdb_test "handle SIGFOO" \
	"Unrecognized or ambiguous flag word: \"SIGFOO\".*" \
	"handle with bogus SIG"

    gdb_test "handle SIGHUP frump" \
	"Unrecognized or ambiguous flag word: \"frump\".*" \
	"handle SIG with bogus action"

    # Verify that "handle" can take multiple actions per SIG, and that
    # in the case of conflicting actions, that the rightmost action
    # "wins".

    gdb_test "handle SIGHUP print noprint" \
	"SIGHUP\[ \t\]*No\[ \t\]*No\[ \t\]*Yes\[ \t\]*Hangup.*" \
	"handle SIG with multiple conflicting actions"

    # Exercise all the various actions.  (We don't care what the
    # outcome is, this is just to ensure that they all can be parsed.)

    gdb_test "handle SIGHUP print noprint stop nostop ignore noignore pass nopass" \
	"Signal.*" \
	"handle SIG parses all legal actions"

    # Verify that we can "handle" multiple signals at once,
    # interspersed with actions.

    gdb_test "handle SIG63 print SIGILL" \
	"SIGILL\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Illegal instruction.*SIG63\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Real-time event 63.*" \
	"handle multiple SIGs"

    # Verify that "handle" can take a numeric argument for the signal
    # ID, rather than a symbolic name.  (This may not be portable;
    # works for HP-UX.)

    # Also note that this testpoint overrides SIGTRAP, which on HP-UX
    # at least, is used to implement single-steps and breakpoints.
    # Don't expect to run the inferior after this!

    set test "override SIGTRAP"
    gdb_test_multiple "handle 5 nopass" "$test" {
	-re "SIGTRAP is used by the debugger.*Are you sure you want to change it.*y or n.*" {
	    gdb_test "y" \
		"SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*" \
		"$test"
	}
    }

    # GDB doesn't seem to allow numeric signal IDs larger than 15.  Verify
    # that restriction.  ??rehrauer: Not sure if this is a feature or a
    # bug, actually.  Why is the range 1-15?

    gdb_test "handle 58" \
	"Only signals 1-15 are valid as numeric signals.*Use \"info signals\" for a list of symbolic signals.*" \
	"invalid signal number rejected"

    # Verify that we can accept a signal ID range (number-number).
    # ??rehrauer: This feature isn't documented on the quick-reference
    # card.

    gdb_test "handle 13-15" \
	"SIGPIPE.*SIGALRM.*SIGTERM.*" \
	"handle multiple SIGs via integer range"

    # Bizarrely enough, GDB also allows you to reverse the range stat,
    # stop IDs.  E.g., "3-1" and "1-3" mean the same thing.  Probably
    # this isn't documented, but the code anticipates it, so we'd best
    # test it...

    gdb_test "handle 15-13" \
	"SIGPIPE.*SIGALRM.*SIGTERM.*" \
	"handle multiple SIGs via reverse integer range"

    # SIGINT is used by the debugger as well.  Verify that we can
    # change our minds about changing it.

    set test "override SIGINT"
    gdb_test_multiple "handle SIGINT nopass" "$test" {
	-re "SIGINT is used by the debugger.*Are you sure you want to change it.*y or n.*" {
	    gdb_test_multiple "n" "$test" {
		-re "Not confirmed, unchanged.*Signal.*$gdb_prompt $"  {
		    # "Signal ..." should not be in the output.
		    fail gdb/8812 "$test"
		}
		-re "Not confirmed, unchanged.*$gdb_prompt $" {
		    pass "$test"
		}
	    }
	}
    }

    # Verify that GDB responds gracefully to the "signal" command with
    # a missing argument.

    gdb_test "signal" \
	"Argument required .signal number..*" \
	"signal without arguments disallowed"
    
    # Verify that we can successfully send a signal other than 0 to
    # the inferior.  (This probably causes the inferior to run away.
    # Be prepared to rerun to main for further testing.)

    gdb_test "signal SIGUSR1" "Breakpoint.*handler.*"
    gdb_test "bt" \
	"#0  handler .*#1  .signal handler called.*\#2 .*main.*" \
	"backtrace for SIGUSR1"
}

return 0
