[ppc-linux-nat]: set access flag for h/w watchpoint even if it is only read or write

Wu Zhou
2006-06-09T15:40:43Z

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