# Copyright 2012 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 [target_info exists use_gdb_stub] {
    untested ${testfile}.exp
    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 ${testfile}.exp
    return -1
}

clean_restart $executable

# Simulate non-stop+target-async 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" "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"
