# Copyright 2004-2024 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.

require {!target_info exists gdb,nosignals}

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]} {
    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"
