From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30432 invoked by alias); 9 Aug 2008 13:49:56 -0000 Received: (qmail 30424 invoked by uid 22791); 9 Aug 2008 13:49:55 -0000 X-Spam-Check-By: sourceware.org Received: from mail.idnet.net.uk (HELO mail.idnet.net.uk) (212.69.36.63) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sat, 09 Aug 2008 13:49:02 +0000 Received: from [91.135.5.64] by mail.idnet.net.uk (GMS 15.00.3626/NU3963.00.7ca42f0c) with ESMTP id belsykba for gdb@sourceware.org; Sat, 9 Aug 2008 14:48:58 +0100 Subject: Re: Problem with can_use_hw_breakpoint From: Jeremy Bennett Reply-To: jeremy.bennett@embecosm.com To: gdb@sourceware.org In-Reply-To: References: <200807312204.m6VM4JQM007611@tully.CS.Berkeley.EDU> <200808011054.24219.apoenitz@trolltech.com> <20080801125124.GA13594@caradoc.them.org> <20080801135920.GA17022@caradoc.them.org> <20080801152850.GA23431@caradoc.them.org> <1218283386.2855.106.camel@thomas> Content-Type: text/plain Date: Tue, 12 Aug 2008 14:56:00 -0000 Message-Id: <1218289789.2855.125.camel@thomas> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 (2.22.3.1-1.fc9) Content-Transfer-Encoding: 7bit X-AuthenticatedSender: jeremy.bennett.embecosm.com@idnet.net.uk X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2008-08/txt/msg00159.txt.bz2 On Sat, 2008-08-09 at 15:19 +0300, Eli Zaretskii wrote: > > From: Jeremy Bennett > > Date: Sat, 09 Aug 2008 13:03:06 +0100 > > > > This function is called in response to watch, rwatch, awatch or hbreak > > commands. My architecture can support up to 4 hardware watchpoints. > > Consider the sequence > > > > awatch a (watchpoint 1) > > awatch b (watchpoint 2) > > rwatch c (watchpoint 3) > > rwatch d (watchpoint 4) > > rwatch e > > > > rwatch e should fail (5th request), but all I know from the call to > > can_use_hw_breakpoint() is that 3 of this type are requested and that > > some other type of watchpoint (but not how many) has previously been > > requested. > > You say above that your architecture supports up to 4 hardware > watchpoints. Given that, isn't it enough to simply add 3+1 and > compare that to 4? Hi Eli, Thanks for the quick response. The problem is that I should be adding 3 (the rwatch) + 2 (the awatch) and thus rejecting the watchpoint, but I have no way of knowing that the count of awatch points is 2 - just that is is greater than zero. > > Ideally I would like can_use_hw_breakpoint to supply me with an array > > with the counts of all types of HW breakpoint/watchpoint requested, so I > > could determine the total resource currently required. > > What are the exact limitations of your architecture? Do they depend > on the types of the watchpoints, and if so, how? It's the OpenRISC 1000 architecture. It implements 8 hardware "matchpoints" which can be used for GDB HW breakpoints (needs one matchpoint) or GDB HW watchpoints of any type (each needs a pair of matchpoints). So I could handle 2 HW breakpoints with 1 rwatch and 2 awatch watchpoints for example. > Take a look at i386-nat.c: it maintains a mirror of the hardware > watchpoints related resources, and consults them for both allowing > multiple watchpoints that watch the same addresses, and for deciding > when another watchpoint cannot be defined. Many thanks - this gave me some more hints. I've realized that TARGET_CAN_USE_HARDWARE_WATCHPOINT is not guaranteed to give a correct answer - it is just a "best guess". Section 5.1.2 of the User Guide explains (if in doubt always read the manual :-)) "If you set too many hardware watchpoints, GDB might be unable to insert all of them when you resume the execution of your program. Since the precise number of active watchpoints is unknown until such time as the program is about to be resumed, GDB might not be able to warn you about this when you set the watchpoints, and the warning will be printed only when the program is resumed: Hardware watchpoint num : Could not insert watchpoint If this happens, delete or disable some of the watchpoints." This is good enough for me. I can get it right most of the time from the data supplied and stop worrying about the corner cases (my example above). I notice that the i386 has the simplest approximation of all - it always returns 1 for TARGET_CAN_USE_HARDWARE_WATCHPOINT. Best wishes, Jeremy -- Tel: +44 (1202) 416955 Cell: +44 (7970) 676050 SkypeID: jeremybennett Email: jeremy.bennett@embecosm.com Web: www.embecosm.com