# Copyright 1992, 1994-2000, 2007-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/>.

# This file was written by Fred Fish. (fnf@cygnus.com)


set testfile "watchpoint"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if [get_compiler_info] {
    return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested watchpoint.exp
     return -1
}

# True if we're forcing no hardware watchpoints.
set no_hw 0

# Prepare for watchpoint tests by setting up two breakpoints and one
# watchpoint.
#
# We use breakpoints at marker functions to get past all the startup code,
# so we can get to the watchpoints in a reasonable amount of time from a
# known starting point.
#
# For simplicity, so we always know how to reference specific breakpoints or
# watchpoints by number, we expect a particular ordering and numbering of
# each in the combined breakpoint/watchpoint table, as follows:
#
#	Number		What		Where
#	1		Breakpoint	marker1()
#	2		Breakpoint	marker2()
#	3		Watchpoint	ival3

proc initialize {} {
    global gdb_prompt
    global hex
    global decimal
    global srcfile

    if [gdb_test "break marker1" "Breakpoint 1 at $hex: file .*$srcfile, line $decimal.*" "set breakpoint at marker1" ] { 
      return 0; 
    }


    if [gdb_test "break marker2" "Breakpoint 2 at $hex: file .*$srcfile, line $decimal.*" "set breakpoint at marker2" ] { 
      return 0; 
    }


    if [gdb_test "info break" "1\[ \]*breakpoint.*marker1.*\r\n2\[ \]*breakpoint.*marker2.*" "info break in watchpoint.exp" ] { 
      return 0; 
    }

    gdb_test "watch ival3" ".*\[Ww\]atchpoint 3: ival3.*" "set watchpoint on ival3"

    if [gdb_test "info watch" "3\[ \]*.*watchpoint.*ival3" "watchpoint found in watchpoint/breakpoint table" ] { 
      return 0; 
    }


    # After installing the watchpoint, we disable it until we are ready
    # to use it.  This allows the test program to run at full speed until
    # we get to the first marker function.

    if [gdb_test "disable 3" "disable 3\[\r\n\]+" "disable watchpoint" ] { 
      return 0; 
    }


    return 1
}

#
# Test simple watchpoint.
#

proc test_simple_watchpoint {} {
    global gdb_prompt
    global hex
    global decimal

    # Ensure that the watchpoint is disabled when we startup.

    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_simple_watchpoint" ] { 
      return 0; 
    }

    # Run until we get to the first marker function.

    gdb_run_cmd
    set timeout 600
    set test "run to marker1 in test_simple_watchpoint"
    set retcode [gdb_test_multiple "" $test {
	-re "Breakpoint 1, marker1 .*$gdb_prompt $" {
	    pass $test
	}
    }]

    if { $retcode != 0 } {
	return
    }

    # After reaching the marker function, enable the watchpoint.

    if [gdb_test "enable 3" "^enable 3\[\r\n\]+" "enable watchpoint" ] { 
      return ; 
    }


    gdb_test "break func1" "Breakpoint.*at.*"
    gdb_test_no_output "set \$func1_breakpoint_number = \$bpnum"

    gdb_test "continue" "Continuing.*Breakpoint \[0-9\]*, func1.*" \
	"continue to breakpoint at func1"

    # Continue until the first change, from -1 to 0

    set test "watchpoint hit, first time"
    gdb_test_multiple "cont" $test {
	-re "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*$gdb_prompt $" {
	    pass $test
	}
	-re "Continuing.*Breakpoint.*func1.*$gdb_prompt $" {
	    setup_xfail "m68*-*-*" 2597
	    fail "thought it hit breakpoint at func1 twice"
	    gdb_test_no_output "delete \$func1_breakpoint_number"
	    gdb_test "continue" "\
Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count;" \
		$test
	}
    }

    # Check that the hit count is reported correctly
    gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 1 time.*" "Watchpoint hit count is 1"

    gdb_test_no_output "delete \$func1_breakpoint_number"

    # Continue until the next change, from 0 to 1.
    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*" "watchpoint hit, second time"

    # Check that the hit count is reported correctly
    gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 2 times.*" "Watchpoint hit count is 2"

    # Continue until the next change, from 1 to 2.
    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 2.*ival3 = count; ival4 = count;.*" "watchpoint hit, third time"

    # Check that the hit count is reported correctly
    gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 3 times.*" "Watchpoint hit count is 3"
    
    # Continue until the next change, from 2 to 3.
    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 3.*ival3 = count; ival4 = count;.*" "watchpoint hit, fourth time"

    # Check that the hit count is reported correctly
    gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 4 times.*" "Watchpoint hit count is 4"

    # Continue until the next change, from 3 to 4.
    # Note that this one is outside the loop.

    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 4.*ival3 = count; ival4 = count;.*" "watchpoint hit, fifth time"

    # Check that the hit count is reported correctly
    gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 5 times.*" "Watchpoint hit count is 5"

    # Continue until we hit the finishing marker function.
    # Make sure we hit no more watchpoints.

    gdb_test "cont" "Continuing.*Breakpoint.*marker2 \(\).*" \
	"continue to marker2"

    # Disable the watchpoint so we run at full speed until we exit.

    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "watchpoint disabled" ] { 
      return ; 
    }


    # Run until process exits.

    if [target_info exists gdb,noresults] { return }

    gdb_continue_to_end "continue to exit in test_simple_watchpoint"
}

# Test disabling watchpoints.

proc test_disabling_watchpoints {} {
    global gdb_prompt
    global binfile
    global srcfile
    global decimal
    global hex

    gdb_test "info watch" "\[0-9]+\[ \]*.*watchpoint.*ival3.*" "watchpoints found in watchpoint/breakpoint table"

    # Ensure that the watchpoint is disabled when we startup.

    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint in test_disabling_watchpoints" ] { 
      return 0; 
    }


    # Run until we get to the first marker function.

    gdb_run_cmd
    set timeout 600
    set test "run to marker1 in test_disabling_watchpoints"
    set retcode [gdb_test_multiple "" $test {
	-re "Breakpoint 1, marker1 .*$gdb_prompt $" {
	    pass $test
	}
    }]

    if { $retcode != 0 } {
	return
    }

    # After reaching the marker function, enable the watchpoint.

    if [gdb_test "enable 3" "^enable 3\[\r\n\]+" "watchpoint enabled" ] { 
      return ; 
    }


    # Continue until the first change, from -1 to 0
    # Don't check the old value, because on VxWorks the variable value
    # will not have been reinitialized.
    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = .*New value = 0.*ival3 = count; ival4 = count;.*" "watchpoint hit in test_disabling_watchpoints, first time"
    
    # Continue until the next change, from 0 to 1.
    gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*" "watchpoint hit in test_disabling_watchpoints, second time"
    
    # Disable the watchpoint but leave breakpoints

    if [gdb_test "disable 3" "^disable 3\[\r\n\]+" "disable watchpoint #2 in test_disabling_watchpoints" ] { 
      return 0; 
    }


    # Check watchpoint list, looking for the entry that confirms the
    # watchpoint is disabled.
    gdb_test "info watchpoints" "\[0-9]+\[ \]*.*watchpoint\[ \]*keep\[ \]*n\[ \]*ival3\r\n.*" "watchpoint disabled in table"

    # Continue until we hit the finishing marker function.
    # Make sure we hit no more watchpoints.
    gdb_test "cont" "Continuing.*Breakpoint.*marker2 \\(\\).*" \
	"disabled watchpoint skipped"
    
    if [target_info exists gdb,noresults] { return }

    gdb_continue_to_end "continue to exit in test_disabling_watchpoints"
}

# Test stepping and other mundane operations with watchpoints enabled
proc test_stepping {} {
    global gdb_prompt

    if [runto marker1] then {
	gdb_test "watch ival2" ".*\[Ww\]atchpoint \[0-9\]*: ival2"

	# Well, let's not be too mundane.  It should be a *bit* of a challenge
	gdb_test "break func2 if 0" "Breakpoint.*at.*"
	gdb_test "p \$func2_breakpoint_number = \$bpnum" " = .*"

	gdb_test "p func1 ()" "= 73" \
	    "calling function with watchpoint enabled"

	# 
	# "finish" brings us back to main.
	# On some targets (e.g. alpha) gdb will stop from the finish in midline
	# of the marker1 call. This is due to register restoring code on
	# the alpha and might be caused by stack adjustment instructions
	# on other targets. In this case we will step once more.
	#

	send_gdb "finish\n"
	gdb_expect {
	    -re "Run.*exit from.*marker1.* at" {
		pass "finish from marker1"
	    }
	    default { fail "finish from marker1 (timeout)" ; return }
	}

	gdb_expect {
	    -re "marker1 \\(\\);.*$gdb_prompt $" {
		send_gdb "step\n"
		exp_continue
	    }
	    -re "func1 \\(\\);.*$gdb_prompt $" {
		pass "back at main from marker1"
	    }
	    -re ".*$gdb_prompt $" {
		fail "back at main from marker1"
	    }
	    default { fail "back at main from marker1 (timeout)" ; return }
	}

	gdb_test "next" "for \\(count = 0.*" "next to `for' in watchpoint.exp"

	# Now test that "until" works.  It's a bit tricky to test
	# "until", because compilers don't always arrange the code
	# exactly the same way, and we might get slightly different
	# sequences of statements.  But the following should be true
	# (if not it is a compiler or a debugger bug): The user who
	# does "until" at every statement of a loop should end up
	# stepping through the loop once, and the debugger should not
	# stop for any of the remaining iterations.

	gdb_test "until" "ival1 = count.*" "until to ival1 assignment"
	gdb_test "until" "ival3 = count.*" "until to ival3 assignment"
	set test "until out of loop"
	gdb_test_multiple "until" $test {
	    -re "(for \\(count = 0|\}).*$gdb_prompt $" {
		gdb_test "until" "ival1 = count; /. Outside loop ./" $test
	    }
	    -re "ival1 = count; /. Outside loop ./.*$gdb_prompt $" {
		pass $test
	    }
	}

	gdb_test "step" "ival2 = count.*" "step to ival2 assignment"
    }
}

# Test stepping and other mundane operations with watchpoints enabled
proc test_watchpoint_triggered_in_syscall {} {
    global gdb_prompt

    # These tests won't work without printf support.
    if [gdb_skip_stdio_test "watchpoints triggered in syscall"] {
	return;
    }
    # Run until we get to the first marker function.
    set x 0
    set y 0
    set testname "Watch buffer passed to read syscall"
    if [runto marker2] then {
	gdb_test "watch buf\[0\]" ".*\[Ww\]atchpoint \[0-9\]*: buf\\\[0\\\]"
	gdb_test "watch buf\[1\]" ".*\[Ww\]atchpoint \[0-9\]*: buf\\\[1\\\]"
	gdb_test "watch buf\[2\]" ".*\[Ww\]atchpoint \[0-9\]*: buf\\\[2\\\]"
	gdb_test "watch buf\[3\]" ".*\[Ww\]atchpoint \[0-9\]*: buf\\\[3\\\]"
	gdb_test "watch buf\[4\]" ".*\[Ww\]atchpoint \[0-9\]*: buf\\\[4\\\]"
	gdb_test "break marker4" ".*Breakpoint.*"

	gdb_test_no_output "set doread = 1"

	# If we send gdb "123\n" before gdb has switched the tty, then it goes
	# to gdb, not the inferior, and we lose.  So that is why we have
	# watchpoint.c prompt us, so we can wait for that prompt.

	send_gdb "continue\n";
	gdb_expect {
	    -re "Continuing\\.\r\ntype stuff for buf now:" {
		pass "continue to read"
	    }
	    default {
		fail "continue to read";
		return ;
	    }
	}

	set test "sent 123"
	gdb_test_multiple "123" $test {
	    -re ".*\[Ww\]atchpoint.*buf\\\[0\\\].*Old value = 0.*New value = 49\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
	    -re ".*\[Ww\]atchpoint.*buf\\\[1\\\].*Old value = 0.*New value = 50\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
	    -re ".*\[Ww\]atchpoint.*buf\\\[2\\\].*Old value = 0.*New value = 51\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
	    -re ".*\[Ww\]atchpoint.*buf\\\[3\\\].*Old value = 0.*New value = 10\[^\n\]*\n" { set x [expr $x+1] ; exp_continue }
	    -re ".*$gdb_prompt $" { pass $test }
	}

	# Examine the values in buf to see how many watchpoints we
	# should have printed.
	set test "print buf\[0\]"
	gdb_test_multiple $test $test {
	    -re ".*= 49.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
	    -re ".*= 0.*$gdb_prompt $" { $test }
	}
	set test "print buf\[1\]"
	gdb_test_multiple $test $test {
	    -re ".*= 50.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
	    -re ".*= 0.*$gdb_prompt $" { pass $test }
	}
	set test "print buf\[2\]"
	gdb_test_multiple $test $test {
	    -re ".*= 51.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
	    -re ".*= 0.*$gdb_prompt $" { pass $test }
	}
	set test "print buf\[3\]"
	gdb_test_multiple $test $test {
	    -re ".*= 10.*$gdb_prompt $" { set y [expr $y+1]; pass $test }
	    -re ".*= 0.*$gdb_prompt $" { pass $test }
	}

	# Did we find what we were looking for?  If not, flunk it.
	if [expr $x==$y] then { pass $testname } else { fail "$testname (only triggered $x watchpoints, expected $y)"}

	# Continue until we hit the finishing marker function.
	# Make sure we hit no more watchpoints.
	gdb_test "cont" "Continuing.*Breakpoint.*marker4 \\(\\).*" \
	    "continue to marker4"

	# Disable everything so we can finish the program at full speed
	gdb_test_no_output "disable" "disable in test_watchpoint_triggered_in_syscall"

	if [target_info exists gdb,noresults] { return }

	gdb_continue_to_end "continue to exit in test_watchpoint_triggered_in_syscall"
    }
}

# Do a simple test of of watching through a pointer when the pointer
# itself changes.  Should add some more complicated stuff here.

proc test_complex_watchpoint {} {
    global gdb_prompt

    if [runto marker4] then {
	gdb_test "watch ptr1->val" ".*\[Ww\]atchpoint \[0-9\]*: ptr1->val"
	gdb_test "break marker5" ".*Breakpoint.*"

	gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ptr1->val.*Old value = 1.*New value = 2.*" "Test complex watchpoint"

	# Continue until we hit the marker5 function.
	# Make sure we hit no more watchpoints.

	gdb_test "cont" "Continuing.*Breakpoint.*marker5 \\(\\).*" \
	    "did not trigger wrong watchpoint"

        # Test watches of things declared locally in a function.
        # In particular, test that a watch of stack-based things
        # is deleted when the stack-based things go out of scope.
        #
	gdb_test_no_output "disable" "disable in test_complex_watchpoint"
        gdb_test "break marker6" ".*Breakpoint.*"
        gdb_test "cont" "Continuing.*Breakpoint.*marker6 \\(\\).*" \
            "continue to marker6"
	gdb_breakpoint [gdb_get_line_number "func2 breakpoint here"]
	gdb_continue_to_breakpoint "func2 breakpoint here"

        # Test a watch of a single stack-based variable, whose scope
        # is the function we're now in.  This should auto-delete when
        # execution exits the scope of the watchpoint.
        #
        gdb_test "watch local_a" ".*\[Ww\]atchpoint \[0-9\]*: local_a" "set local watch"
        gdb_test "cont" "\[Ww\]atchpoint.*local_a.*" "trigger local watch"

	set test "self-delete local watch"
        gdb_test_multiple "cont" $test {
	    -re "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*\r\n$gdb_prompt $" {
		pass $test
	    }
	    -re "can't compute CFA for this frame.*\r\n$gdb_prompt $" {
		global compiler_info no_hw

		# GCC < 4.5.0 does not get LOCATIONS_VALID set by dwarf2read.c.
		# Therefore epilogue unwinder gets applied which is
		# incompatible with dwarf2_frame_cfa.
		verbose -log "compiler_info: $compiler_info"
		if {$no_hw && ([test_compiler_info {gcc-[0-3]-*}]
			       || [test_compiler_info {gcc-4-[0-4]-*}])} {
		    xfail "$test (old GCC has broken watchpoints in epilogues)"
		    return
		}
		fail $test
	    }
	}

	gdb_continue_to_breakpoint "func2 breakpoint here"
        # We should be in "func2" again now.  Test a watch of an
        # expression which includes both a stack-based local and
        # something whose scope is larger than this invocation
        # of "func2".  This should also auto-delete.
        #
        gdb_test "watch local_a + ival5" ".*\[Ww\]atchpoint \[0-9\]*: local_a . ival5" \
                 "set partially local watch"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_a . ival5.*" \
                 "trigger1 partially local watch"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_a . ival5.*" \
                 "trigger2 partially local watch"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
                 "self-delete partially local watch"

        # We should be in "func2" again now.  Test a watch of a
        # static (non-stack-based) local.  Since this has scope
        # across any invocations of "func2", it should not auto-
        # delete.
        #
	gdb_continue_to_breakpoint "func2 breakpoint here"
        gdb_test "watch static_b" ".*\[Ww\]atchpoint \[0-9\]*: static_b" \
                 "set static local watch"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: static_b.*" \
                 "trigger static local watch"
        gdb_test "cont" "Continuing.*marker6 \\(\\).*" \
                 "continue after trigger static local watch"
        gdb_test "info break" ".*watchpoint.*static_b.*" \
                 "static local watch did not self-delete"

        # We should be in "recurser" now.  Test a watch of a stack-
        # based local.  Symbols mentioned in a watchpoint are bound
        # at watchpoint-creation.  Thus, a watch of a stack-based
        # local to a recursing function should be bound only to that
        # one invocation, and should not trigger for other invocations.
        #
        gdb_test "tbreak recurser" ".*breakpoint.*"
        gdb_test "cont" "Continuing.*recurser.*"
        gdb_test "next" "if \\(x > 0.*" "next past local_x initialization"
        gdb_test "watch local_x" ".*\[Ww\]atchpoint \[0-9\]*: local_x" \
                 "set local watch in recursive call"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: local_x.*New value = 2.*" \
                 "trigger local watch in recursive call"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
                 "self-delete local watch in recursive call"

        # Repeat the preceding test, but this time use "recurser::local_x" as
        # the variable to track.
        gdb_test "cont" "Continuing.*marker6.*"
        gdb_test "tbreak recurser" ".*breakpoint.*"
        gdb_test "cont" "Continuing.*recurser.*"
        gdb_test "next" "if \\(x > 0.*" "next past local_x initialization"
        gdb_test "watch recurser::local_x" ".*\[Ww\]atchpoint \[0-9\]*: recurser::local_x" \
                 "set local watch in recursive call with explicit scope"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .*: recurser::local_x.*New value = 2.*" \
                 "trigger local watch with explicit scope in recursive call"
        gdb_test "cont" "Continuing.*\[Ww\]atchpoint .* deleted because the program has left the block in.*which its expression is valid.*" \
                 "self-delete local watch with explicit scope in recursive call (2)"

	# Disable everything so we can finish the program at full speed
	gdb_test_no_output "disable" "disable in test_complex_watchpoint"

	if [target_info exists gdb,noresults] { return }

	gdb_continue_to_end "continue to exit in test_complex_watchpoint"
    }
}

proc test_watchpoint_and_breakpoint {} {
    global gdb_prompt

    # This is a test for PR gdb/38, which involves setting a
    # watchpoint right after you've reached a breakpoint.

    if [runto func3] then {
	gdb_breakpoint [gdb_get_line_number "second x assignment"]
	gdb_continue_to_breakpoint "second x assignment"
	gdb_test "watch x" ".*atchpoint \[0-9\]+: x"
	gdb_test_multiple "next" "next after watch x" {
	    -re ".*atchpoint \[0-9\]+: x\r\n\r\nOld value = 0\r\nNew value = 1\r\n.*$gdb_prompt $" {
		pass "next after watch x"
	    }
	    -re "\[0-9\]+\[\t \]+y = 1;\r\n$gdb_prompt $" {
		kfail "gdb/38" "next after watch x"
	    }
	}

	gdb_test_no_output "delete \$bpnum" "delete watch x"
    }
}

proc test_constant_watchpoint {} {
    gdb_test "watch 5" "Cannot watch constant value `5'." "number is constant"
    gdb_test "watch (int *)5" "Cannot watch constant value `\\(int \\*\\)5'." \
    "number with cast is constant"
    gdb_test "watch marker1" "Cannot watch constant value `marker1'." \
    "marker1 is constant"
    gdb_test "watch count + 6" ".*atchpoint \[0-9\]+: count \\+ 6"
    gdb_test_no_output "delete \$bpnum" "delete watchpoint `count + 6'"
    gdb_test "watch 7 + count" ".*atchpoint \[0-9\]+: 7 \\+ count"
    gdb_test_no_output "delete \$bpnum" "delete watchpoint `7 + count'"
}

proc test_disable_enable_software_watchpoint {} {
    # This is regression test for a bug that caused `enable' to fail
    # for software watchpoints.

    # Watch something not memory to force a software watchpoint.
    gdb_test {watch $pc} ".*atchpoint \[0-9\]+: .pc"

    gdb_test_no_output "disable \$bpnum" "disable watchpoint `\$pc'"
    gdb_test_no_output "enable \$bpnum" "reenable watchpoint `\$pc'"

    gdb_test "info watchpoint \$bpnum" \
	".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+.pc.*" \
	"watchpoint `\$pc' is enabled"

    gdb_test_no_output "delete \$bpnum" "delete watchpoint `\$pc'"
}

proc test_watch_location {} {
    gdb_breakpoint [gdb_get_line_number "func5 breakpoint here"]
    gdb_continue_to_breakpoint "func5 breakpoint here"

    gdb_test "watch -location *x" "atchpoint .*: .*" "watch -location .x"

    gdb_test "continue" \
	"Continuing.*\[Ww\]atchpoint .*: .*New value = 27.*" \
	"continue with watch -location"

    gdb_test_no_output "delete \$bpnum" "delete watch -location"
}

# Tests watching areas larger than a word.

proc test_wide_location_1 {} {
    global no_hw
    global gdb_prompt

    # This test watches two words on most 32-bit ABIs, and one word on
    # most 64-bit ABIs.

    # Platforms where the target can't watch such a large region
    # should clear hw_expected below.
    if { $no_hw || [target_info exists gdb,no_hardware_watchpoints]
         || [istarget arm*-*-*]
         || ([istarget powerpc*-*-*] && ![is_lp64_target])} {
	set hw_expected 0
    } else {
	set hw_expected 1
    }

    gdb_breakpoint [gdb_get_line_number "func6 breakpoint here"]
    gdb_continue_to_breakpoint "func6 breakpoint here"

    if { $hw_expected } {
	gdb_test "watch foo2" "Hardware watchpoint .*: .*" "watch foo2"
	gdb_test "continue" \
	    "Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*" \
	    "continue with watch foo2"
    } else {
	gdb_test "watch foo2" "atchpoint .*: .*" "watch foo2"
	set test "continue with watch foo2"
	gdb_test_multiple "cont" $test {
	    -re "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*$gdb_prompt $" {
		pass $test
	    }
	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
		# This may happen with remote targets that support
		# hardware watchpoints.  We only find out the
		# watchpoint was too large, for example, at insert
		# time.  If GDB is ever adjusted to downgrade the
		# watchpoint automatically in this case, this match
		# should be removed.
		pass $test
	    }
	}
    }

    gdb_test_no_output "delete \$bpnum" "delete watch foo2"
}

proc test_wide_location_2 {} {
    global no_hw
    global gdb_prompt

    # This test watches four words on most 32-bit ABIs, and two words
    # on 64-bit ABIs.

    # Platforms where the target can't watch such a large region
    # should clear hw_expected below.
    if { $no_hw || [target_info exists gdb,no_hardware_watchpoints]
         || [istarget arm*-*-*]
         || [istarget powerpc*-*-*]} {
	set hw_expected 0
    } else {
	set hw_expected 1
    }

    gdb_breakpoint [gdb_get_line_number "func7 breakpoint here"]
    gdb_continue_to_breakpoint "func7 breakpoint here"

    if { $hw_expected } {
	gdb_test "watch foo4" "Hardware watchpoint .*: .*" "watch foo4"
	gdb_test "continue" \
	    "Continuing.*Hardware watchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*" \
	    "continue with watch foo4"
    } else {
	gdb_test "watch foo4" "atchpoint .*: .*" "watch foo4"
	set test "continue with watch foo4"
	gdb_test_multiple "cont" $test {
	    -re "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*$gdb_prompt $" {
		pass $test
	    }
	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
		# This may happen with remote targets that support
		# hardware watchpoints.  We only find out the
		# watchpoint was too large, for example, at insert
		# time.  If GDB is ever adjusted to downgrade the
		# watchpoint automatically in this case, this match
		# should be removed.
		pass $test
	    }
	}
    }

    gdb_test_no_output "delete \$bpnum" "delete watch foo4"
}

proc test_inaccessible_watchpoint {} {
    global gdb_prompt

    # This is a test for watchpoints on currently inaccessible (but later
    # valid) memory.

    if [runto func4] then {
	# Make sure we only allow memory access errors.
	set msg "watchpoint refused to insert on nonexistent struct member"
	gdb_test_multiple "watch struct1.nosuchmember" $msg {
	    -re ".*atchpoint \[0-9\]+: struct1.nosuchmember.*$gdb_prompt $" {
		# PR breakpoints/9681
		fail $msg
	    }
	    -re "There is no member named nosuchmember\\..*$gdb_prompt $" {
		pass $msg
	    }
	}

	# See whether a watchpoint on a normal variable is a hardware
	# watchpoint or not.  The watchpoints on NULL should be hardware
	# iff this one is.
	set watchpoint_msg "Watchpoint"
	gdb_test_multiple "watch global_ptr" "watch global_ptr" {
	    -re "Watchpoint \[0-9\]+: global_ptr\r\n.*$gdb_prompt $" {
		pass "watch global_ptr"
	    }
	    -re "Hardware watchpoint \[0-9\]+: global_ptr\r\n.*$gdb_prompt $" {
		set watchpoint_msg "Hardware watchpoint"
		pass "watch global_ptr"
	    }
	}
	delete_breakpoints

	# Make sure that we can watch a constant address, and correctly
	# use a HW watchpoint if supported.
	gdb_test "watch *(int *) 0" \
	    "$watchpoint_msg \[0-9\]+: \\*\\(int \\*\\) 0"
	delete_breakpoints

	# The same, but using -location through an indirection.
	gdb_test "watch -location *global_ptr" \
	    "$watchpoint_msg \[0-9\]+: \-location \\*global_ptr"
	delete_breakpoints

	# This step requires two HW watchpoints.  Since some platforms only
	# have a single one, accept either SW or HW watchpoint in this case.
	if {[skip_hw_watchpoint_multi_tests]} {
	    set watchpoint_msg "(Watchpoint|Hardware watchpoint)"
	}

	gdb_test "watch *global_ptr" "$watchpoint_msg \[0-9\]+: \\\*global_ptr"
	gdb_test "set \$global_ptr_breakpoint_number = \$bpnum" ""
	gdb_test "next" ".*global_ptr = buf.*" "global_ptr next"
	gdb_test_multiple "next" "next over ptr init" {
	    -re ".*atchpoint \[0-9\]+: \\*global_ptr\r\n\r\nOld value = .*\r\nNew value = 3 .*\r\n.*$gdb_prompt $" {
		# We can not test for <unknown> here because NULL may be readable.
		# This test does rely on *NULL != 3.
		pass "next over ptr init"
	    }
	}
	gdb_test_multiple "next" "next over buffer set" {
	    -re ".*atchpoint \[0-9\]+: \\*global_ptr\r\n\r\nOld value = 3 .*\r\nNew value = 7 .*\r\n.*$gdb_prompt $" {
		pass "next over buffer set"
	    }
	}
	gdb_test "delete \$global_ptr_breakpoint_number" ""
	gdb_test "watch **global_ptr_ptr" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr"
	gdb_test "set \$global_ptr_ptr_breakpoint_number = \$bpnum" ""
	gdb_test "next" ".*global_ptr_ptr = &global_ptr.*" "global_ptr_ptr next"
	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = .*\r\nNew value = 7 .*" "next over global_ptr_ptr init"
	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = 7 .*\r\nNew value = 9 .*" "next over global_ptr_ptr buffer set"
	gdb_test "next" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\[\r\n\]+Old value = 9 .*\r\nNew value = 5 .*" "next over global_ptr_ptr pointer advance"
	gdb_test_no_output "delete \$global_ptr_ptr_breakpoint_number"
    }
}

proc test_no_hw_watchpoints {} {
    global testfile

    clean_restart $testfile

    # Verify that a user can force GDB to use "slow" watchpoints.
    # (This proves rather little on kernels that don't support
    # fast watchpoints, but still...)
    #
    if ![runto_main] then { fail "watch tests suppressed" }

    gdb_test_no_output "set can-use-hw-watchpoints 0" "disable fast watches"

    gdb_test "show can-use-hw-watchpoints" \
	"Debugger's willingness to use watchpoint hardware is 0." \
	"show disable fast watches"

    gdb_test "watch ival3 if  count > 1" \
	"Watchpoint \[0-9\]*: ival3.*" \
	"set slow conditional watch"

    gdb_test "continue" \
	"Watchpoint \[0-9\]*: ival3.*Old value = 1.*New value = 2.*" \
	"trigger slow conditional watch"

    gdb_test_no_output "delete \$bpnum" "delete watch ival3"

    # We've explicitly disabled hardware watches.  Verify that GDB
    # refrains from using them.
    #
    gdb_test "rwatch ival3" \
	"Expression cannot be implemented with read/access watchpoint..*" \
	"rwatch disallowed when can-set-hw-watchpoints cleared"

    # Re-enable hardware watchpoints if necessary.
    if ![target_info exists gdb,no_hardware_watchpoints] {
        gdb_test_no_output "set can-use-hw-watchpoints 1" ""
    }
}

proc test_watchpoint_in_big_blob {} {
    global gdb_prompt

    # On native targets where we do hardware resource accounting, this
    # may end up as a software watchpoint.
    set ok 0
    set test "watch buf"
    gdb_test_multiple "watch buf" $test {
	-re "Hardware watchpoint \[0-9\]+: buf.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
	    # This may happen with remote targets (where we don't do
	    # resource accounting) that support hardware watchpoints,
	    # when breakpoint always-inserted is on.  The watchpoint
	    # was too large, for example.  If GDB is ever adjusted to
	    # downgrade the watchpoint automatically in this case,
	    # this match should be removed.  Note the breakpoint has
	    # been created, and is in the list, so it needs deleting.
	    pass $test
	}
	-re ".*atchpoint \[0-9\]+: buf.*$gdb_prompt $" {
	    pass $test
	    set ok 1
	}
    }

    if { $ok } {
	set test "watchpoint on buf hit"
	gdb_test_multiple "cont" $test {
	    -re "Continuing.*atchpoint \[0-9\]+: buf\r\n\r\nOld value = .*testte\".*$gdb_prompt $" {
		pass $test
	    }
	    -re "Could not insert hardware breakpoints:.*You may have requested too many hardware breakpoints/watchpoints.*$gdb_prompt $" {
		# This may happen with remote targets that support
		# hardware watchpoints.  We only find out the
		# watchpoint was too large, for example, at insert
		# time.  If GDB is ever adjusted to downgrade the
		# watchpoint automatically in this case, this match
		# should be removed.
		pass $test
	    }
	}
    }

    gdb_test_no_output "delete \$bpnum" "delete watch buf"
}

# Start with a fresh gdb.

set prev_timeout $timeout
set timeout 600	
verbose "Timeout now 600 sec.\n"

test_no_hw_watchpoints

proc do_tests {} {
    global testfile
    global no_hw

    clean_restart $testfile

    if {$no_hw || [target_info exists gdb,no_hardware_watchpoints]} {
	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
    }

    if [initialize] then {

	test_simple_watchpoint

	test_disabling_watchpoints

	if ![target_info exists gdb,cannot_call_functions] {
	    test_stepping
	}
    }

    # Tests below don't rely on the markers and watchpoint set by
    # `initialize' anymore.
    clean_restart $testfile

    if {$no_hw || [target_info exists gdb,no_hardware_watchpoints]} {
	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
    }

    # Only enabled for some targets merely because it has not been tested 
    # elsewhere.
    # On sparc-sun-sunos4.1.3, GDB was running all the way to the marker4 
    # breakpoint before stopping for the watchpoint.  I don't know why.
    if {[istarget "hppa*-*-*"]} then {
	test_watchpoint_triggered_in_syscall
    }

    test_complex_watchpoint

    test_inaccessible_watchpoint

    test_watchpoint_and_breakpoint

    test_watchpoint_in_big_blob

    test_constant_watchpoint

    test_disable_enable_software_watchpoint

    test_watch_location

    test_wide_location_1
    test_wide_location_2
}

# On targets that can do hardware watchpoints, run the tests twice:
# once with hardware watchpoints enabled; another with hardware
# watchpoints force-disabled.

do_tests
if ![target_info exists gdb,no_hardware_watchpoints] {
    with_test_prefix "no-hw" {
	set no_hw 1
	do_tests
    }
}

# Restore old timeout
set timeout $prev_timeout
verbose "Timeout now $timeout sec.\n"
