[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