This is the mail archive of the
mailing list for the GDB project.
Re: Bug with i386 watchpoints
> Date: Wed, 21 Nov 2001 14:07:03 +0100
> From: Pierre Muller <firstname.lastname@example.org>
> >>I do see the same problem in my cygwin implementation ...
> > I now see :
> > only the go32-nat.c code does call
> > i386_clean_dregs function.
> >I didn't have it in my cygwin patch,
> >and it also does not appear in
> >any other gdb dir source.
> > This is probably the cause of the problem,
> >it does indeed solve the bug for cygwin if I add this call to
> >child_mourn_inferior as go32-nat code does.
> > Probably the same will fix the bug for linux too, but I can't try this
> > out now...
> I tried to look into the i386 linux files but I don't really know into
> which file
> we should add this call to i386_cleanup_dregs.
> Eli, does the i386_cleanup_dregs also get called if you kill
> your debugged program ? I suspect not, maybe this should be tested.
I don't think the missing call to i386_cleanup_dregs is the reason
for the problems you see. That function shouldn't be needed for any
Unix style port of GDB, because when the debuggee exits, the OS
should clean up the watchpoint information from its own internal data
The DJGPP port does call i386_cleanup_dregs because in that port, the
OS doesn't know diddley-squat about the watchpoints (or, indeed, about
the fact that GDB is running another program), and so go32-nat.c
inserts the watchpoints every time it is going to run the debuggee.
To insert the watchpoints, go32-nat.c uses the data in the dr_*
arrays, so if they are not cleaned up when the debuggee exits,
go32-nat.c will not DTRT (insert watchpoints you don't want, etc.).
I suggest to use the maint show-debug-regs command to see what is
going wrong with the watchpoints when you restart the debuggee. If
you cannot figure out what the output tells, post it here.