From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3001 invoked by alias); 22 Dec 2008 03:28:58 -0000 Received: (qmail 2993 invoked by uid 22791); 22 Dec 2008 03:28:58 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 22 Dec 2008 03:28:08 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 994752A9610; Sun, 21 Dec 2008 22:28:06 -0500 (EST) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id C6QVzlZP4jOL; Sun, 21 Dec 2008 22:28:06 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id C06CE2A960A; Sun, 21 Dec 2008 22:28:05 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id 370BAE7ACD; Mon, 22 Dec 2008 07:27:58 +0400 (RET) Date: Mon, 22 Dec 2008 03:28:00 -0000 From: Joel Brobecker To: Emi SUZUKI Cc: gdb-patches@sourceware.org Subject: Re: Watchpoint on an unloaded shared library(1) Message-ID: <20081222032758.GA2835@adacore.com> References: <20081120.210657.01365938.emi-suzuki@tjsys.co.jp> <20081213150517.GE6866@adacore.com> <20081216.211520.207584606.emi-suzuki@tjsys.co.jp> <20081221131036.GB25416@adacore.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20081221131036.GB25416@adacore.com> User-Agent: Mutt/1.4.2.2i Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-12/txt/msg00369.txt.bz2 > > > How about replace all the code that's inside > > > > > > if (bpt->type == bp_watchpoint || > > > bpt->type == bp_hardware_watchpoint || > > > bpt->type == bp_read_watchpoint || > > > bpt->type == bp_access_watchpoint) > > > { > > > [re-create a lot of stuff for our watchpoint...] > > > > > > by a call to update_watchpoint (bpt, 1)? Would that work in your case? > > > > It works without merging the missing code each other, as long as we > > don't have to care the hardware watchpoint resource count here: if the > > user sets other watchpoints while the disabled hardware watchpoints > > exist, re-enabling the disabled ones might fail out of the shortage of > > resources. > > That's a good point. As it turns out, I think we just got lucky thanks to Jan: http://www.sourceware.org/ml/gdb-patches/2008-12/msg00363.html. update_watchpoint now automagically downgrades hardware watchpoints into a software watchpoints if needed. So we can get rid of that part. So all we have to do, now is: > if (bpt->type == bp_watchpoint || > bpt->type == bp_hardware_watchpoint || > bpt->type == bp_read_watchpoint || > bpt->type == bp_access_watchpoint) > { > struct gdb_exception e; > > TRY_CATCH (e, RETURN_MASK_ALL) > { > update_watchpoint (...); > } > if (e.reason < 0) > { > exception_fprintf (gdb_strerr, e, "Cannot enable watchpoint %d:", > b->number); > return; > } -- Joel