# Copyright 2025 Free Software Foundation, Inc.

# This file is part of GDB.

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

# This test verifies what happens when a code object list update happens at the
# same time as some wave stop events are reported.  It was added following a
# performance bug fix, where forward progress requirement disabled when
# pulling events from amd-dbgapi in amd_dbgapi_target_breakpoint::check_status.
#
# The test launches a kernel that hits a breakpoint with an always false
# condition a certain number of times.  Meanwhile, the host loads and unloads
# a code object in a loop, causing check_status to be called.  The hope is that
# check_status, when calling process_event_queue, will pull many WAVE_STOP
# events from the kernel hitting the breakpoint.
#
# Without the appropriate fix (of disabling forward progress requirement in
# check_status), GDB would hit the newly-added assert in process_event_queue,
# which verifies that forward progress requirement is disabled.  Even without
# this assert, the test would likely time out (depending on the actual timeout
# value).

load_lib rocm.exp
standard_testfile .cpp
require allow_hipcc_tests

# Build the host executable.
if { [build_executable "failed to prepare" \
	  $testfile $srcfile {debug hip}] == -1 } {
    return -1
}

set hipmodule_path [standard_output_file ${testfile}.co]

# Build the kernel object file.
if { [gdb_compile $srcdir/$subdir/$srcfile \
	$hipmodule_path object \
	{ debug hip additional_flags=--genco additional_flags=-DDEVICE } ] != "" } {
    return -1
}

proc do_test { } {
    with_rocm_gpu_lock {
	clean_restart $::binfile
	gdb_test_no_output "set args $::hipmodule_path" "set args"

	if { ![runto_main] } {
		return
	}

	gdb_test "with breakpoint pending on -- break break_here if 0"
	gdb_continue_to_end "continue to end" "continue" 1
    }
}

do_test
