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


if {[skip_hw_watchpoint_tests]} {
    return 0
}

standard_testfile

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

# Create the watchpoint before the inferior gets started.  Now the native CPU
# target is still not active and its `to_can_use_hw_breakpoint' is not
# installed, therefore only a software watchpoint gets created.

gdb_test "watch watchee" "atchpoint 1: watchee"

# `runto_main' or `runto main' would delete the watchpoint created above.

if { [gdb_start_cmd] < 0 } {
    untested start
    return -1
}
gdb_test "" "main .* at .*" "start"

# Check it is really a `hw'-watchpoint.
gdb_test "info watchpoints" "1 *hw watchpoint .* watchee"
