List Info

Thread: Watchpoint conditions broken?




Watchpoint conditions broken?
country flaguser name
Canada
2008-04-09 15:29:07
Hi,

when trying out a new version of GDB, we run a set of DSF
JUnit tests to make sure
DSF interfaces with the new GDB properly.  Those tests are
pretty detailed in their
attempt to exercise gdb functionality.

When running those tests with gdb 6.8, I found a failure
with watchpoint conditions
which use to work in gdb 6.7

I tried to investigate, but I couldn't figure out where the
watchpoint condition
was actually checked after the watchpoint was hit...  Or are
hardware watchpoints
not supposed to be triggered at all, if the condition is not
satisfied?

Below is a very small tests that shows the problem.
This is not normal, right?

Thanks

> gdb a.out
Wed Apr  9 16:20:30 EDT 2008
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/l
icenses/gpl.html>
This is free software: you are free to change and
redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type
"show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) l 1
1       int j;
2
3       int foo(int i)
4       {
5           j=i;
6           if (j==1) 
7               j=2;
8           else
9             j=3;
10          return j;
(gdb) 
11      }
12
13      int main() {
14          foo(1);
15          foo(2);
16      }
(gdb) b main
Breakpoint 1 at 0x8048447: file watch.cc, line 14.
(gdb) r
Starting program: /local/home/lmckhou/testing/a.out 

Breakpoint 1, main () at watch.cc:14
14          foo(1);
(gdb) watch j if j==3
Hardware watchpoint 2: j
(gdb) c
Continuing.
Hardware watchpoint 2: j

Old value = 0
New value = 1         
<<<<<<<<<<<<<<<
why did it stop here?
foo (i=1) at watch.cc:6
6           if (j==1) 
(gdb) c
Continuing.
Hardware watchpoint 2: j

Old value = 1
New value = 2
0x08048423 in foo (i=1) at watch.cc:7
7               j=2;
(gdb) p j
$1 = 2

(gdb) info b
Num     Type           Disp Enb Address    What
1       breakpoint     keep y   0x08048447 in main at
watch.cc:14
        breakpoint already hit 1 time
2       hw watchpoint  keep y              j
        stop only if j==3
        breakpoint already hit 2 times
== 
Marc Khouzam

Re: Watchpoint conditions broken?
country flaguser name
Israel
2008-04-09 16:04:09
> Date: Wed, 9 Apr 2008 16:29:07 -0400
> From: "Marc Khouzam" <marc.khouzamericsson.com>
> 
> I tried to investigate, but I couldn't figure out where
the watchpoint condition
> was actually checked after the watchpoint was hit... 
Or are hardware watchpoints
> not supposed to be triggered at all, if the condition
is not satisfied?

Hardware watchpoints _are_ supposed to trigger, but once
they do, GDB
should see that the condition is false, and not announce
the
watchpoint.

> Below is a very small tests that shows the problem.
> This is not normal, right?

No, it's a bug.

RE: Watchpoint conditions broken?
country flaguser name
Canada
2008-04-09 22:06:33
> Hardware watchpoints _are_ supposed to trigger, but
once they do, GDB
> should see that the condition is false, and not
announce the
> watchpoint.

That is what I needed to know.  Thanks.

I believe the problem is in update_watchpoint().  
The below shows a fix that worked for me.
Funny thing is that this fix is the original way the code
was posted, as part of the patch about multiple locations 
for hardware breakpoints.

http://sourceware.org/ml/gdb-patches/2007-12/msg00008.
html

Does it make sense?

Index: gdb/breakpoint.c
============================================================
=======
RCS file: /cvs/src/src/gdb/breakpoint.c,v
retrieving revision 1.307
diff -u -r1.307 breakpoint.c
--- gdb/breakpoint.c    14 Mar 2008 18:57:43 -0000     
1.307
+++ gdb/breakpoint.c    10 Apr 2008 02:57:41 -0000
 -986,7
+986,7 
            value_free (v);
        }
 
-      if (reparse && b->cond_string != NULL)
+      if (b->cond_string != NULL)
        {
          char *s = b->cond_string;
          if (b->loc->cond)

==
Marc Khouzam

Re: Watchpoint conditions broken?
country flaguser name
United States
2008-05-01 13:09:45
On Thu, Apr 10, 2008 at 01:15:34PM +0400, Vladimir Prus
wrote:
> I'm attaching a testcase for this problem. OK when
Marc's code fix is in?

Sorry, missed this since it wasn't on gdb-patches.  The only
problem
is this bit:

> +    gdb_test "set can-use-hw-watchpoints
1n" "" "enable hardware watchpoints
again"

See the condition in proc initialize about when we can use
hw
watchpoints in the testsuite.

-- 
Daniel Jacobowitz
CodeSourcery

[1-4]

about | contact  Other archives ( Real Estate discussion Medical topics )