# Copyright 2004-2020 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
}

standard_testfile
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
    return -1
}

gdb_test "display/i \$pc"

# Advance to main
if ![runto_main] then {
    fail "can't run to main"
    return 0
}

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

gdb_breakpoint "pass"

# Check for correct si_addr.
gdb_test "continue" "Breakpoint .* pass .*" "correct si_addr"
