From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31041 invoked by alias); 30 Sep 2002 03:34:43 -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 31027 invoked from network); 30 Sep 2002 03:34:41 -0000 Received: from unknown (HELO localhost.redhat.com) (24.112.240.27) by sources.redhat.com with SMTP; 30 Sep 2002 03:34:41 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id 4841F3CB7 for ; Sun, 29 Sep 2002 23:34:37 -0400 (EDT) Message-ID: <3D97C64D.5060108@redhat.com> Date: Sun, 29 Sep 2002 20:34:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.0) Gecko/20020824 X-Accept-Language: en-us, en MIME-Version: 1.0 To: gdb-patches@sources.redhat.com Subject: [rfa:breakpoint] Correctly count watchpoints Content-Type: multipart/mixed; boundary="------------050605040902030401000306" X-SW-Source: 2002-09/txt/msg00738.txt.bz2 This is a multi-part message in MIME format. --------------050605040902030401000306 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 662 Hello, The attached modifies breakpoint.c so that (I think) it correctly counts the number of watchpoint resources in use. (per earlier post) An expression like: a + b requires two watchpoint resources (&a and &b). When first creating the watchpoint, gdb correctly counts this as two. However, when GDB goes back to compute the number of watchpoints already used, it does a re-count and treats the above (and any watchpoint expression) as only one. The attached, I belive, fixes this by saving the mem_cnt that was computed. One thing I wonder about though, should ``info breakpoints'' or ``maint info breakpoints'' display this info? Ok? Andrew --------------050605040902030401000306 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 2392 2002-09-29 Andrew Cagney * breakpoint.c (watch_command_1): Save mem_cnt in watchpoint. (hw_watchpoint_used_count): Accumulate the mem_cnt's * breakpoint.h: Update copyright. (struct breakpoint): Add field mem_cnt; Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.90 diff -u -r1.90 breakpoint.c --- breakpoint.c 22 Sep 2002 20:29:52 -0000 1.90 +++ breakpoint.c 30 Sep 2002 03:09:42 -0000 @@ -4288,13 +4288,15 @@ { if (b->enable_state == bp_enabled) { - if (b->type == type) - i++; - else if ((b->type == bp_hardware_watchpoint || - b->type == bp_read_watchpoint || - b->type == bp_access_watchpoint) - && b->enable_state == bp_enabled) - *other_type_used = 1; + if (b->type == bp_hardware_watchpoint + || b->type == bp_read_watchpoint + || b->type == bp_access_watchpoint) + { + if (b->type == type) + i += b->mem_cnt; + else + *other_type_used = 1; + } } } return i; @@ -5384,6 +5386,7 @@ b->exp_valid_block = exp_valid_block; b->exp_string = savestring (exp_start, exp_end - exp_start); b->val = val; + b->mem_cnt = mem_cnt; b->cond = cond; if (cond_start) b->cond_string = savestring (cond_start, cond_end - cond_start); Index: breakpoint.h =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.h,v retrieving revision 1.13 diff -u -r1.13 breakpoint.h --- breakpoint.h 16 Aug 2002 15:37:54 -0000 1.13 +++ breakpoint.h 30 Sep 2002 03:11:51 -0000 @@ -1,6 +1,7 @@ /* Data structures associated with breakpoints in GDB. - Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000 - Free Software Foundation, Inc. + + Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2002 Free Software Foundation, Inc. This file is part of GDB. @@ -260,6 +261,11 @@ struct block *exp_valid_block; /* Value of the watchpoint the last time we checked it. */ struct value *val; + + /* Count of memory watchpoint resources needed. An expression can + refer to more than one location and hence may require more than + one memory watchpoint. */ + int mem_cnt; /* Holds the value chain for a hardware watchpoint expression. */ struct value *val_chain; --------------050605040902030401000306--