diff options
author | Pedro Alves <palves@redhat.com> | 2011-12-13 16:05:24 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-12-13 16:05:24 +0000 |
commit | fabde4854cc349f0269c073508450789874ef156 (patch) | |
tree | 473cf7603e71a7ca14df1941b6697b9dcdb1df22 /gdb/testsuite/gdb.base/watchpoint.exp | |
parent | d9071b0c4242fe1180340d52c6b6207e794675ae (diff) | |
download | gdb-fabde4854cc349f0269c073508450789874ef156.zip gdb-fabde4854cc349f0269c073508450789874ef156.tar.gz gdb-fabde4854cc349f0269c073508450789874ef156.tar.bz2 |
2011-12-13 Pedro Alves <pedro@codesourcery.com>
* gdb.base/watchpoint.c (struct foo2, foo2, struct foo4, foo4)
(func6, func7): New.
(main): Call func6 and func7.
* gdb.base/watchpoint.exp (test_wide_location_1)
(test_wide_location_2): New.
(top level): Re-enable hardware watchpoints if necessary. Call
test_wide_location_1 and test_wide_location_2.
Diffstat (limited to 'gdb/testsuite/gdb.base/watchpoint.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint.exp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/watchpoint.exp b/gdb/testsuite/gdb.base/watchpoint.exp index 331b181..574dd8b 100644 --- a/gdb/testsuite/gdb.base/watchpoint.exp +++ b/gdb/testsuite/gdb.base/watchpoint.exp @@ -660,6 +660,68 @@ proc test_watch_location {} { gdb_test_no_output "delete \$bpnum" "delete watch -location" } +# Tests watching areas larger than a word. + +proc test_wide_location_1 {} { + # 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 [target_info exists gdb,no_hardware_watchpoints] { + 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" + gdb_test "continue" \ + "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 11\\\}\\\}.*" \ + "continue with watch foo2" + } + + gdb_test_no_output "delete \$bpnum" "delete watch foo2" +} + +proc test_wide_location_2 {} { + # 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 [target_info exists gdb,no_hardware_watchpoints] { + 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" + gdb_test "continue" \ + "Continuing.*\[Ww\]atchpoint .*: .*New value = \\\{val = \\\{0, 0, 0, 33\\\}\\\}.*" \ + "continue with watch foo4" + } + + gdb_test_no_output "delete \$bpnum" "delete watch foo4" +} + proc test_inaccessible_watchpoint {} { global gdb_prompt @@ -923,6 +985,14 @@ if [initialize] then { test_disable_enable_software_watchpoint test_watch_location + + # Re-enable hardware watchpoints if necessary. + if ![target_info exists gdb,no_hardware_watchpoints] { + gdb_test_no_output "set can-use-hw-watchpoints 1" "" + } + + test_wide_location_1 + test_wide_location_2 } # Restore old timeout |