From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19123 invoked by alias); 21 Nov 2001 21:26:40 -0000 Mailing-List: contact gdb-help@sourceware.cygnus.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sources.redhat.com Received: (qmail 19102 invoked from network); 21 Nov 2001 21:26:37 -0000 Received: from unknown (HELO heimdall.inter.net.il) (192.114.186.17) by sourceware.cygnus.com with SMTP; 21 Nov 2001 21:26:37 -0000 Received: from zaretsky ([192.116.55.139]) by heimdall.inter.net.il (Mirapoint) with ESMTP id BBG45957; Wed, 21 Nov 2001 20:35:26 +0200 (IST) Date: Sat, 10 Nov 2001 11:13:00 -0000 From: "Eli Zaretskii" To: muller@cerbere.u-strasbg.fr Message-Id: <8296-Wed21Nov2001203519+0200-eliz@is.elta.co.il> X-Mailer: emacs 21.1.50 (via feedmail 8 I) and Blat ver 1.8.9 CC: gdb@sources.redhat.com In-reply-to: <4.2.0.58.20011121140420.01afe368@ics.u-strasbg.fr> (message from Pierre Muller on Wed, 21 Nov 2001 14:07:03 +0100) Subject: Re: Bug with i386 watchpoints Reply-to: Eli Zaretskii References: <4.2.0.58.20011121130736.016b6e80@ics.u-strasbg.fr> <4.2.0.58.20011121124943.00a4a288@ics.u-strasbg.fr> <4.2.0.58.20011121140420.01afe368@ics.u-strasbg.fr> X-SW-Source: 2001-11/txt/msg00106.txt.bz2 > Date: Wed, 21 Nov 2001 14:07:03 +0100 > From: Pierre Muller > > >>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 structures. 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.