This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[ppc-linux-nat]: set access flag for h/w watchpoint even if it is only read or write
- From: Wu Zhou <woodzltc at cn dot ibm dot com>
- To: gdb-patches at sourceware dot org
- Date: Fri, 9 Jun 2006 23:40:26 +0800 (CST)
- Subject: [ppc-linux-nat]: set access flag for h/w watchpoint even if it is only read or write
Hello all,
I found a bug in the current ppc-linux h/w watchpoint implementation:
when we set read watchpoint to some expression, if there are any write
operation to it before a read operation is hit, watchpoint_check will see
that its value is changed. So user won't see the watchpoint is hit.
I make one change to the SET_DEBUGREG operation: even if it is only
read or write watchpoint, we still set access flag. Then, no matter
what operation is on the watched address, a SIGTRAP will be triggered.
The gdb code itself can determine if it is a write operation or read
operation. If it is write, watchpoint_check routine can update the
bs->value to the latest.
Here is the patch. Thanks for reviewing.
2006-06-09 Wu Zhou <woodzltc@cn.ibm.com>
* ppc-linux-nat.c (ppc_linux_insert_watchpoint): Set access flag for
all hardware watchpoint.
--- ppc-linux-nat.c.orig 2006-06-09 14:53:35.000000000 +0800
+++ ppc-linux-nat.c 2006-06-09 15:04:12.000000000 +0800
@@ -821,22 +821,7 @@ ppc_linux_insert_watchpoint (CORE_ADDR a
long dabr_value;
ptid_t ptid = inferior_ptid;
- dabr_value = addr & ~7;
- switch (rw)
- {
- case hw_read:
- /* Set read and translate bits. */
- dabr_value |= 5;
- break;
- case hw_write:
- /* Set write and translate bits. */
- dabr_value |= 6;
- break;
- case hw_access:
- /* Set read, write and translate bits. */
- dabr_value |= 7;
- break;
- }
+ dabr_value = addr | 7;
tid = TIDGET (ptid);
if (tid == 0)
:ADDPATCH ppc:
Regards
- Wu Zhou