# Copyright 2014-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 GDB doesn't lose control when a breakpoint is set at the
# same address as a dprintf.

standard_testfile

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

set dp_location [gdb_get_line_number "set dprintf here"]

proc test { style } {
    global gdb_prompt binfile dp_location

    with_test_prefix "$style" {
	clean_restart $binfile

	if ![runto_main] {
	    return -1
	}

	delete_breakpoints

	gdb_test_no_output "set dprintf-style $style"

	# Enable always-inserted so we can control the breakpoint
	# insertion order.
	gdb_test_no_output "set breakpoint always-inserted on"

	set test "set dprintf"
	gdb_test_multiple "dprintf $dp_location, \"y=%d\\n\", y" $test {
	    -re "cannot run dprintf commands.*$gdb_prompt $" {
		unsupported $test
	    }
	    -re "Dprintf .* at .*$gdb_prompt $" {
		pass $test
	    }
	}

	# In case of agent style, this should force the target to
	# report the trap to GDB.  IOW, GDB should remove the commands
	# from the target-side breakpoint.
	gdb_test "break $dp_location" ".*" "set breakpoint"

	gdb_test "continue" "set dprintf here.*"
    }
}

test "gdb"
test "agent"
