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

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

# Test that checks if we handle a SIGSEGV,SIGILL caused by gdb in the inferior
# even if we have noprint,nostop options set in handle SIGSEV,SIGILL
# See PR breakpoints/16812

standard_testfile

# Some targets can't call functions, so don't even bother with this
# test.
if [target_info exists gdb,cannot_call_functions] {
    unsupported "cannot call functions"
    return
}

set dp_location [gdb_get_line_number "set dprintf here"]
set bp_location [gdb_get_line_number "set breakpoint here"]

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

if ![runto_main] {
    return -1
}

gdb_test "handle SIGSEGV nostop noprint" \
    "Signal\[ \t\]+Stop\[ \t\]+Print\[ \t\]+Pass to program\[ \t\]+Description\r\nSIGSEGV\[ \t\]+No\[ \t\]+No\[ \t\]+Yes\[ \t\].*"
gdb_test "handle SIGILL nostop noprint" \
    "Signal\[ \t\]+Stop\[ \t\]+Print\[ \t\]+Pass to program\[ \t\]+Description\r\nSIGILL\[ \t\]+No\[ \t\]+No\[ \t\]+Yes\[ \t\].*"

gdb_test "print return_one()" " = 1"

if ![target_info exists gdb,noinferiorio] {

    # Clean up the breakpoint state.
    delete_breakpoints

    gdb_breakpoint $bp_location

    gdb_test_no_output "set dprintf-style call"

    # Also test with dprintf since the original bug was noticed using dprintf.
    gdb_test "dprintf $dp_location,\"testdprintf\\n\"" "Dprintf .*"

    gdb_test_stdio "continue" "testdprintf"
}
