# Copyright 2004, 2007-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/>.


# The program siginfo-addr.c arranges for a signal handler registered
# using sigaction's sa_sigaction / SA_SIGINFO to be called with
# si_addr filled in.

# This test confirms that the si_addr value is correct rather than
# having been corrupted when GDB passed the signal on to the handler.

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

if [gdb_skip_stdio_test "siginfo-addr.exp"] {
    continue
}


set testfile siginfo-addr
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "Couldn't compile ${srcfile}.c"
    return -1
}

# get things started
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

gdb_test "display/i \$pc"

# Advance to main
if { ![runto_main] } then {
    gdb_suppress_tests;
}

# Run to the signal.
gdb_test "continue" ".*Program received signal SIGSEGV.*" "continue to signal"

# Check for correct si_addr.
set test "program exit"
gdb_test_multiple "continue" "${test}" {
    -re "Correct si_addr" {
	pass "si_addr value"
    }
    -re "Got si_addr" {
	fail "si_addr value"
    }
}
