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

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

# 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] {
    fail "can't run to main to make the tests"
    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"
}
