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

standard_testfile
set executable ${testfile}

# Multiple inferiors are needed, therefore both native and extended gdbserver
# modes are supported.  Only non-extended gdbserver is not supported.
if [use_gdb_stub] {
    untested "using gdb stub"
    return
}

# Do not use simple hardware watchpoints ("watch") as its false hit may be
# unnoticed by GDB if it reads it still has the same value.
if [skip_hw_watchpoint_access_tests] {
    untested "${testfile} (no hardware access watchpoints)"
    return
}

if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
    untested "failed to compile"
    return -1
}

clean_restart $executable

# Simulate non-stop which also uses breakpoint always-inserted.
gdb_test_no_output "set breakpoint always-inserted on"
# displaced-stepping is also needed as other GDB sometimes still removes the
# breakpoints, even with always-inserted on.
# Without the support this test just is not as thorough as it could be.
if [support_displaced_stepping] {
    gdb_test_no_output "set displaced-stepping on"
}

# Debugging of this testcase:
#gdb_test_no_output "maintenance set show-debug-regs on"
#gdb_test_no_output "set debug infrun 1"

gdb_breakpoint main {temporary}
gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 1"

gdb_test "add-inferior" "Added inferior 2 on connection .*" "add inferior 2"
gdb_test "inferior 2" "witching to inferior 2 .*" "switch to inferior 2, first time"
gdb_load $binfile

gdb_breakpoint main {temporary}
gdb_test "run" "Temporary breakpoint.* main .*" "start to main inferior 2"

gdb_test "awatch c" \
    "Hardware access \\(read/write\\) watchpoint \[0-9\]+: c" \
    "awatch c on inferior 2"

gdb_breakpoint "marker_exit"

gdb_test "inferior 1" "witching to inferior 1 .*" "switch back to inferior 1"

if [skip_hw_watchpoint_multi_tests] {
    # On single hardware watchpoint at least test the watchpoint in inferior
    # 2 is not hit.
} else {
    gdb_test "awatch b" \
	"Hardware access \\(read/write\\) watchpoint \[0-9\]+: b" \
	"awatch b on inferior 1"

    gdb_test "inferior 2" "witching to inferior 2 .*" "switch to inferior 2 again"

    # FAIL would be a hit on watchpoint for `b' - that one is for the other
    # inferior.
    gdb_test "continue" \
	"Hardware access \\(read/write\\) watchpoint \[0-9\]+: c\r\n\r\nOld value = 0\r\nNew value = 3\r\n.*" \
	"catch c on inferior 2"

    gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 2"

    gdb_test "inferior 1" "witching to inferior 1 .*" "switch back to inferior 1 again"

    gdb_test "continue" "Hardware access \\(read/write\\) watchpoint \[0-9\]+: b\r\n\r\nOld value = 0\r\nNew value = 2\r\n.*" "catch b on inferior 1"
}

gdb_test "continue" "Breakpoint \[0-9\]+, marker_exit .*" "catch marker_exit in inferior 1"
