From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32121 invoked by alias); 29 Aug 2002 22:13:59 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 32114 invoked from network); 29 Aug 2002 22:13:58 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 29 Aug 2002 22:13:58 -0000 Received: from redhat.com (reddwarf.sfbay.redhat.com [172.16.24.50]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id PAA00247; Thu, 29 Aug 2002 15:06:15 -0700 (PDT) Message-ID: <3D6E9C9F.A7018859@redhat.com> Date: Thu, 29 Aug 2002 15:16:00 -0000 From: Michael Snyder Organization: Red Hat, Inc. X-Accept-Language: en MIME-Version: 1.0 To: Pierre Muller CC: gdb-patches@sources.redhat.com, jimb@redhat.com Subject: Re: [RFA] 2nd send: Solve the watchpoint failures on second run. References: <4.2.0.58.20020715162013.02270ed8@ics.u-strasbg.fr> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-SW-Source: 2002-08/txt/msg01010.txt.bz2 Pierre Muller wrote: > > I got no answer to that RFA, > http://sources.redhat.com/ml/gdb-patches/2002-06/msg00394.html > thus I send it again. > > This bug is related to bug 515 of database. > The following note: > >(This patch, together with the previous RFA that I sent today, > >fixes the problem for both statically and dynamically linked > >programs). > Can be modified into: > The following patch together with the patch commited > on july 4. 2002 > http://sources.redhat.com/ml/gdb-cvs/2002-07/msg00036.html > fiwes bug 515 both for statically and dynamically linked programs. > > If you use my previous patch and compile the test program > of the 515 bug with --static option, > you will still miss the change of x value on the second run. > This comes from the fact that the val field of the watchpoint is > not reset correctly when the program is restarted. > > I first tried to fix this problem by using evaluate_expression > in the breakpoint_init_inferior function. But, while this fixes the problem for > the win32 native debugger, it leads to problems for linux, > beacuse the program is not yet loaded into memory > when this function is called: instead, the bash used for launch the debuggee > seems to be in memory... > > So the only way I found to fix that error was to reset val field to NULL > so that the val field is computed again > correctly at the first insert_breakpoint call. Looks OK to me, Pierre -- except please move the '{' from the end of the line. Thanks Michael > > 2002-06-19 Pierre Muller > > * breakpoint.c (breakpoint_init_inferior): Reset the val field of > watchpoints to NULL. > (insert_breakpoints): set val field of watchpoints if NULL. > > Index: breakpoint.c > =================================================================== > RCS file: /cvs/src/src/gdb/breakpoint.c,v > retrieving revision 1.77 > diff -u -p -r1.77 breakpoint.c > --- breakpoint.c 18 Jun 2002 21:58:55 -0000 1.77 > +++ breakpoint.c 19 Jun 2002 15:20:39 -0000 > @@ -725,7 +725,18 @@ insert_breakpoints (void) > if (b->enable_state == bp_permanent) > /* Permanent breakpoints cannot be inserted or removed. */ > continue; > - else if (b->type != bp_watchpoint > + if ((b->type == bp_watchpoint > + || b->type == bp_hardware_watchpoint > + || b->type == bp_read_watchpoint > + || b->type == bp_access_watchpoint) && (!b->val)) { > + struct value *val; > + val = evaluate_expression (b->exp); > + release_value (val); > + if (VALUE_LAZY (val)) > + value_fetch_lazy (val); > + b->val = val; > + } > + if (b->type != bp_watchpoint > && b->type != bp_hardware_watchpoint > && b->type != bp_read_watchpoint > && b->type != bp_access_watchpoint > @@ -1520,6 +1531,14 @@ breakpoint_init_inferior (enum inf_conte > /* Likewise for watchpoints on local expressions. */ > if (b->exp_valid_block != NULL) > delete_breakpoint (b); > + if (context == inf_starting) > + { > + /* Reset val field to force reread of starting value > + in insert_breakpoints. */ > + if (b->val) > + value_free (b->val); > + b->val = NULL; > + } > break; > default: > /* Likewise for exception catchpoints in dynamic-linked > > Pierre Muller > Institut Charles Sadron > 6,rue Boussingault > F 67083 STRASBOURG CEDEX (France) > mailto:muller@ics.u-strasbg.fr > Phone : (33)-3-88-41-40-07 Fax : (33)-3-88-41-40-99 > > Pierre Muller > Institut Charles Sadron > 6,rue Boussingault > F 67083 STRASBOURG CEDEX (France) > mailto:muller@ics.u-strasbg.fr > Phone : (33)-3-88-41-40-07 Fax : (33)-3-88-41-40-99