[RFA-v2] Fix a windows bug if two watchpoints are used
Pierre Muller
muller@ics.u-strasbg.fr
Thu Jun 4 07:33:00 GMT 2009
> -----Message d'origine-----
> De : gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] De la part de Eli Zaretskii
> Envoyé : Thursday, June 04, 2009 9:12 AM
> À : Pierre Muller
> Cc : gdb-patches@sourceware.org
> Objet : Re: [RFA-v2] Fix a windows bug if two watchpoints are used
>
> > From: "Pierre Muller" <muller@ics.u-strasbg.fr>
> > Cc: <gdb-patches@sourceware.org>
> > Date: Thu, 4 Jun 2009 08:33:52 +0200
> > Content-Language: en-us
> >
> > Considering the objections to my first patch, I
> > here submit another patch that
> > make i386_stopped_data_address
> > return as soon as one hit is found.
>
> This part is fine with me.
>
> > The change in I386_DR_DISABLE is still
> > useful for the second test inside the i386_stopped_data_address
> > function.
>
> What do we need that for? Does the Intel spec say that these its need
> to be zeroed for disabled debug registers?
>
> > This patch does fix my windows specific problem.
>
> Is your problem fixed without the change in I386_DR_DISABLE?
My problem is indeed fixed without that part,
but without my change to I386_DR_DISABLE, the second check
in i386_stopped_data_address:
ALL_DEBUG_REGISTERS(i)
{
if (I386_DR_WATCH_HIT (i)
/* This second condition makes sure DRi is set up for a data
watchpoint, not a hardware breakpoint. The reason is
that GDB doesn't call the target_stopped_data_address
method except for data watchpoints. In other words, I'm
being paranoiac. */
&& I386_DR_GET_RW_LEN (i) != 0)
is not reliable as the return value of I386_DR_GET_RW_LEN (i)
is non-zero if I was used before... Even if it was disabled
later!
Pierre
More information about the Gdb-patches
mailing list