This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] 2nd send: Solve the watchpoint failures on second run.


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  <muller@ics.u-strasbg.fr>
> 
>         * 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]