# This testcase is part of GDB, the GNU debugger.

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

set testfile "signest"
set srcfile ${testfile}.c

if [target_info exists gdb,nosignals] {
    verbose "Skipping ${testfile}.exp because of nosignals."
    return -1
}

if [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug}] {
    untested ${testfile}.exp
    return -1
}

if ![runto_main] then {
    untested ${testfile}.exp
    return -1
}

# If we can examine what's at memory address 0, it is possible that we
# could also execute it.  This could probably make us run away,
# executing random code, which could have all sorts of ill effects,
# especially on targets without an MMU.  Don't run the tests in that
# case.

gdb_test_multiple "x 0" "memory at address 0" {
    -re "0x0:.*Cannot access memory at address 0x0.*$gdb_prompt $" { }
    -re "0x0:.*Error accessing memory address 0x0.*$gdb_prompt $" { }
    -re ".*$gdb_prompt $" {
	untested "Memory at address 0 is possibly executable"
	return -1
    }
}

# Run until we hit the SIGSEGV (or SIGBUS on some platforms).
gdb_test "continue" \
	 ".*Program received signal (SIGBUS|SIGSEGV).*bowler.*" \
         "continue to fault"

# Insert conditional breakpoint at faulting instruction
gdb_test "break if 0" ".*" "set conditional breakpoint"

# Set SIGSEGV/SIGBUS to pass+nostop
gdb_test "handle SIGSEGV nostop print pass" ".*" "pass SIGSEGV"
gdb_test "handle SIGBUS nostop print pass" ".*" "pass SIGBUS"

# Step off the faulting instruction into the handler, triggering nested faults
gdb_test "continue" \
         ".*Program received signal (SIGBUS|SIGSEGV).*Program received signal (SIGBUS|SIGSEGV).*exited normally.*" \
	 "run through nested faults"

