From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3031 invoked by alias); 11 Jan 2002 12:38:35 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 2920 invoked from network); 11 Jan 2002 12:38:27 -0000 Received: from unknown (HELO heimdall.inter.net.il) (192.114.186.17) by sources.redhat.com with SMTP; 11 Jan 2002 12:38:27 -0000 Received: from zaretsky ([192.116.55.139]) by heimdall.inter.net.il (Mirapoint) with ESMTP id BDM76364; Fri, 11 Jan 2002 14:38:18 +0200 (IST) Date: Fri, 11 Jan 2002 04:38:00 -0000 From: "Eli Zaretskii" To: muller@cerbere.u-strasbg.fr Message-Id: <2561-Fri11Jan2002143543+0200-eliz@is.elta.co.il> X-Mailer: emacs 21.1.50 (via feedmail 8 I) and Blat ver 1.8.9 CC: gdb-patches@sources.redhat.com, djbarrow@de.ibm.com In-reply-to: <4.2.0.58.20020111125745.0135ea48@ics.u-strasbg.fr> (message from Pierre Muller on Fri, 11 Jan 2002 13:00:44 +0100) Subject: Re: [RFA/RFC 2] Remove hardware break and watchpoints at program exit. Reply-to: Eli Zaretskii References: <4.2.0.58.20020111125745.0135ea48@ics.u-strasbg.fr> X-SW-Source: 2002-01/txt/msg00283.txt.bz2 > Date: Fri, 11 Jan 2002 13:00:44 +0100 > From: Pierre Muller > > In breakpoint_init_inferior > I added code that conditionally removes hardware watch and breakpoint > if the context is inf_exited, i.e. at exit of the debugged program. Thanks. I like this approach much better, especially because I never understood why does GDB do certain cleanups when the debuggee exits, but doesn't do other, similar cleanups. > I still kept the call to a generic hardware removal function > and testing the i386 case, I could see that even though the dr_mirror > array is zeored out, the dr_control_mirror and > dr_status_mirror still aren't set to zero. > For dr_control_register, this is due to an error in the I386_DR_DISABLE > because that macro only resets the active bit, but not the size and type bits > associated to that debug register. Why is this a problem? Once the active bit is off, the corresponding debug register is inactive, and its value is not important. > * breakpoint.c (REMOVE_HARDWARE_BREAKPOINT_AT_EXIT): > Define to 0 if not defined. > (REMOVE_HARDWARE_WATCHPOINT_AT_EXIT): > Define to 0 if not defined. Why do we need these macros at all? Why not remove the breakpoints and watchpoints unconditionally? Does anyone see any problem? > --- go32-nat.c 2001/12/06 08:15:37 1.26 > +++ go32-nat.c 2002/01/11 11:34:08 > @@ -670,7 +670,7 @@ go32_mourn_inferior (void) > be nice if GDB itself would take care to remove all breakpoints > at all times, but it doesn't, probably under an assumption that > the OS cleans up when the debuggee exits. */ > - i386_cleanup_dregs (); > + // i386_cleanup_dregs (); Please don't make such changes. If you want to remove some code, just remove it, don't comment it away: it looks ad-hoc and not clean.