diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-11-20 19:57:29 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-11-20 19:57:29 +0000 |
commit | a79d3c27d1827de4f4b428644ae1447c93a13de5 (patch) | |
tree | 36a6ba5b863c026b202ce7eade50781a79e0aba6 /gdb/testsuite/gdb.base | |
parent | ebec9a0f77584145a70e8f5627dd590bae43b580 (diff) | |
download | gdb-a79d3c27d1827de4f4b428644ae1447c93a13de5.zip gdb-a79d3c27d1827de4f4b428644ae1447c93a13de5.tar.gz gdb-a79d3c27d1827de4f4b428644ae1447c93a13de5.tar.bz2 |
gdb/
Fix repeated rwatch output.
* amd64-linux-nat.c (amd64_linux_dr_set, amd64_linux_dr_set_control)
(amd64_linux_dr_set_addr, amd64_linux_dr_reset_addr)
(amd64_linux_dr_get_status): New comments.
(amd64_linux_dr_unset_status): New function.
(_initialize_amd64_linux_nat): Install it.
* i386-linux-nat.c (i386_linux_dr_get, i386_linux_dr_set)
(i386_linux_dr_set_control, i386_linux_dr_set_addr)
(i386_linux_dr_reset_addr, i386_linux_dr_get_status): New comments.
(i386_linux_dr_unset_status): New function.
(_initialize_i386_linux_nat): Install it.
* i386-nat.c (I386_DR_WATCH_MASK): New macro.
(I386_DR_WATCH_HIT): Use I386_DR_WATCH_MASK.
(i386_insert_aligned_watchpoint): Call i386_dr_low.unset_status.
* i386-nat.h (struct i386_dr_low_type): Extend comments for
set_control, set_addr, reset_addr and get_status. New unset_status.
* breakpoint.c (update_watchpoint): Extend the comment.
gdb/testsuite/
* gdb.base/watchpoint-hw-hit-once.exp,
gdb.base/watchpoint-hw-hit-once.c: New.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c | 34 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp | 43 |
2 files changed, 77 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c new file mode 100644 index 0000000..cccc9e0 --- /dev/null +++ b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.c @@ -0,0 +1,34 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2009 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/>. */ + +static int watchee; + +int +main (void) +{ + volatile int dummy; + + /* Stub lines are present as no breakpoints/watchpoint gets hit if current PC + already stays on the line PC while entering "step"/"continue". */ + + dummy = 0; /* Stub to catch WATCHEE access after runto_main. */ + dummy = watchee; + dummy = 1; /* Stub to catch break-at-exit after WATCHEE has been hit. */ + dummy = 2; /* break-at-exit */ + + return 0; +} diff --git a/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp new file mode 100644 index 0000000..bd3ad9f --- /dev/null +++ b/gdb/testsuite/gdb.base/watchpoint-hw-hit-once.exp @@ -0,0 +1,43 @@ +# Copyright 2009 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/>. + +# Arch not supporting hw watchpoints does not imply no_hardware_watchpoints set. +if {(![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] + && ![istarget "ia64-*-*"] && ![istarget "s390*-*-*"]) + || [target_info exists gdb,no_hardware_watchpoints]} then { + verbose "Skipping watchpoint-hw-hit-once test." + return +} + +set test watchpoint-hw-hit-once +set srcfile ${test}.c +if { [prepare_for_testing ${test}.exp ${test} ${srcfile}] } { + return -1 +} + +if ![runto_main] { + return -1 +} + +gdb_test "rwatch watchee" + +gdb_breakpoint [gdb_get_line_number "break-at-exit"] + +gdb_test "continue" "Continuing.\r\nHardware read watchpoint \[0-9\]+: watchee\r\n\r\nValue = 0\r\n.*" + +# Here should be no repeated notification of the read watchpoint. +gdb_test "continue" \ + "Continuing\\.\[ \r\n\]+Breakpoint \[0-9\]+, .*break-at-exit.*" \ + "continue to break-at-exit" |