# This testcase is part of GDB, the GNU debugger.

# Copyright 2010-2013 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 GDB bug report 11531.
# This is a problem related to CANNOT_STEP_HW_WATCHPOINTS macro.
# It affects Solaris native targets.


set testfile "gdb11531"

if { [prepare_for_testing $testfile.exp $testfile $testfile.c {debug}] } {
    return -1
}

# Disable hardware watchpoints if necessary.
if [target_info exists gdb,no_hardware_watchpoints] {
   gdb_test_no_output "set can-use-hw-watchpoints 0" ""
}

if { ![runto main] } then {
    fail "run to main"
    return
}

# The breakpoint is probably at the instruction where the value being
# watched (myrec.x) gets updated.  This is the instruction where we
# expect to receive a watchpoint notification when we do the "stepi"
# below.  However, having the breakpoint at the same location as this
# intruction can possibly interfere with our testcase, as stepping
# over the breakpoint in order to get past it may incorrectly lead
# to the debugger missing the watchpoint hit.  This would be a bug
# in GDB, but this is not the bug that we are trying to test here.
# So, we remove all breakpoints first.

delete_breakpoints

set nl "\[\r\n\]+"

gdb_test "watch myrec.x" ".*atchpoint \[0-9\]+: myrec\.x" "Set watchpoint"

gdb_test "next" \
    ".*${nl}.*atchpoint \[0-9\]+: myrec\.x${nl}Old value = 0${nl}New value = 5${nl}.*" \
    "watchpoint variable triggers at next"

gdb_test "continue" \
    ".*${nl}.*atchpoint \[0-9\]+: myrec\.x${nl}Old value = 5${nl}New value = 78${nl}.*" \
    "watchpoint variable triggers at continue"

