From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16604 invoked by alias); 25 Mar 2009 18:00:49 -0000 Received: (qmail 16589 invoked by uid 22791); 25 Mar 2009 18:00:46 -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; Wed, 25 Mar 2009 18:00:41 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 061A32BAAE9 for ; Wed, 25 Mar 2009 14:00:40 -0400 (EDT) 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 g39dKVGGljPq for ; Wed, 25 Mar 2009 14:00:39 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id C605D2BAACF for ; Wed, 25 Mar 2009 14:00:39 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 6144C5BD21; Wed, 25 Mar 2009 11:00:33 -0700 (PDT) Date: Wed, 25 Mar 2009 18:12:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: Re: [RFA/commit] Minor cleanup in breakpoint_thread_match Message-ID: <20090325180033.GB9472@adacore.com> References: <20090325174911.GA9472@adacore.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="BZaMRJmqxGScZ8Mx" Content-Disposition: inline In-Reply-To: <20090325174911.GA9472@adacore.com> User-Agent: Mutt/1.5.18 (2008-05-17) 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: 2009-03/txt/msg00556.txt.bz2 --BZaMRJmqxGScZ8Mx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 629 > 2009-03-25 Joel Brobecker > > * breakpoint.c (breakpoint_thread_match): Split a large condition > into several smaller conditions. No behavior change. > > Tested on x86_64-linux. I made this change in a pretty procedural and > mechanical way. But a second pair of eyes would be appreciated. Plus, > I'd like to know if others also prefer splitting this condition like > I did. Actually, upon rewriting the Ada patch, it occured to me that the following is even more helpful in inserting support for task-specific breakpoints... I'm currently testing the attached patch. -- Joel --BZaMRJmqxGScZ8Mx Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="bp-cleanup.diff" Content-length: 2098 commit 485117c6c4ed62aed31cc919f435494eb6faad49 Author: Joel Brobecker Date: Wed Mar 25 10:38:22 2009 -0700 Minor cleanup of breakpoint_thread_match (splittin one condition a bit) * breakpoint.c (breakpoint_thread_match): Splitt a large condition into several smaller conditions. No behavior change. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 7e50342..258a550 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1893,28 +1893,39 @@ int breakpoint_thread_match (CORE_ADDR pc, ptid_t ptid) { const struct bp_location *bpt; - int thread; - - thread = pid_to_thread_id (ptid); - + /* The thread ID associated to PTID, computed lazily. */ + int thread = -1; + ALL_BP_LOCATIONS (bpt) { if (bpt->loc_type != bp_loc_software_breakpoint && bpt->loc_type != bp_loc_hardware_breakpoint) continue; - if ((breakpoint_enabled (bpt->owner) - || bpt->owner->enable_state == bp_permanent) - && bpt->address == pc - && (bpt->owner->thread == -1 || bpt->owner->thread == thread)) - { - if (overlay_debugging - && section_is_overlay (bpt->section) - && !section_is_mapped (bpt->section)) - continue; /* unmapped overlay -- can't be a match */ - else - return 1; - } + if (!breakpoint_enabled (bpt->owner) + && bpt->owner->enable_state != bp_permanent) + continue; + + if (bpt->address != pc) + continue; + + if (bpt->owner->thread != -1) + { + /* This is a thread-specific breakpoint. Check that ptid + matches that thread. If thread hasn't been computed yet, + it is now time to do so. */ + if (thread == -1) + thread = pid_to_thread_id (ptid); + if (bpt->owner->thread != thread) + continue; + } + + if (overlay_debugging + && section_is_overlay (bpt->section) + && !section_is_mapped (bpt->section)) + continue; /* unmapped overlay -- can't be a match */ + + return 1; } return 0; --BZaMRJmqxGScZ8Mx--