1# Copyright 2009-2015 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# This file was written by Pierre Muller. (muller@ics.u-strasbg.fr) 17 18 19standard_testfile 20 21set wp_set 1 22 23if [get_compiler_info] { 24 return -1 25} 26 27if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { 28 untested $testfile.exp 29 return -1 30} 31 32with_test_prefix "before inferior start" { 33 # Ensure that if we turn off hardware watchpoints and set a watch point 34 # before starting the inferior the watchpoint created will not be a 35 # hardware watchpoint. 36 gdb_test_no_output "set can-use-hw-watchpoints 0" "" 37 gdb_test "watch ival1" "Watchpoint \[0-9\]+: ival1" \ 38 "create watchpoint" 39 40 # The next tests are written to match the current state of gdb: access 41 # and read watchpoints require hardware watchpoint support, with this 42 # turned off these can't be created. 43 gdb_test "awatch ival1" \ 44 "Can't set read/access watchpoint when hardware watchpoints are disabled." \ 45 "create access watchpoint" 46 gdb_test "rwatch ival1" \ 47 "Can't set read/access watchpoint when hardware watchpoints are disabled." \ 48 "create read watchpoint" 49} 50 51 # This will turn hardware watchpoints back on and delete the watchpoint 52 # we just created. 53 clean_restart ${binfile} 54 55 # Disable hardware watchpoints if necessary. 56 if [target_info exists gdb,no_hardware_watchpoints] { 57 gdb_test_no_output "set can-use-hw-watchpoints 0" "" 58 } 59 60 runto_main 61 gdb_test "watch ival1" ".*" "" 62 gdb_test "watch ival3" ".*" "" 63 64 set prev_timeout $timeout 65 set timeout 600 66 67 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival1.*Old value = -1.*New value = 0.*ival1 = count; ival2 = count;.*" "watchpoint hit, first time" 68 69 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = -1.*New value = 0.*ival3 = count; ival4 = count;.*" "watchpoint hit, first time" 70 71 # Check that the ival3 hit count is reported correctly 72 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 1 time.*" "Watchpoint hit count is 1" 73 74 # Continue until the next change for ival1, from 0 to 1. 75 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival1.*Old value = 0.*New value = 1.*ival1 = count; ival2 = count;.*" "watchpoint ival1 hit, second time" 76 77 # Check that the hit count for ival1 is reported correctly 78 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival1\r\n\[ \t]+breakpoint already hit 2 times.*" "Watchpoint ival1 hit count is 2" 79 80 # Continue until the next change for ival3, from 0 to 1. 81 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 0.*New value = 1.*ival3 = count; ival4 = count;.*" "watchpoint hit, second time" 82 83 # Check that the hit count is reported correctly 84 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 2 times.*" "Watchpoint hit count is 2" 85 86 # Continue until the next change, from 1 to 2. 87 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival1.*Old value = 1.*New value = 2.*ival1 = count; ival2 = count;.*" "watchpoint ival1 hit, third time" 88 89 # Check that the hit count is reported correctly 90 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival1\r\n\[ \t]+breakpoint already hit 3 times.*" "Watchpoint ival1 hit count is 3" 91 # Disable ival1 watchpoint 92 gdb_test_no_output "disable 2" "" 93 94 # Continue until the next change, from 1 to 2. 95 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 1.*New value = 2.*ival3 = count; ival4 = count;.*" "watchpoint hit, third time" 96 97 # Check that the hit count is reported correctly 98 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 3 times.*" "Watchpoint hit count is 3" 99 100 # Continue until the next change, from 2 to 3. 101 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 2.*New value = 3.*ival3 = count; ival4 = count;.*" "watchpoint hit, fourth time" 102 103 # Check that the hit count is reported correctly 104 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 4 times.*" "Watchpoint hit count is 4" 105 106 # Continue until the next change, from 3 to 4. 107 # Note that this one is outside the loop. 108 109 gdb_test "cont" "Continuing.*\[Ww\]atchpoint.*ival3.*Old value = 3.*New value = 4.*ival3 = count; ival4 = count;.*" "watchpoint hit, fifth time" 110 111 # Check that the hit count is reported correctly 112 gdb_test "info break" ".*watchpoint\[ \t\]+keep\[ \t\]+y\[ \t\]+ival3\r\n\[ \t]+breakpoint already hit 5 times.*" "Watchpoint hit count is 5" 113 114set timeout $prev_timeout 115