From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18542 invoked by alias); 20 Dec 2011 10:42:04 -0000 Received: (qmail 18528 invoked by uid 22791); 20 Dec 2011 10:42:03 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM X-Spam-Check-By: sourceware.org Received: from mail-ww0-f43.google.com (HELO mail-ww0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 20 Dec 2011 10:41:50 +0000 Received: by wgbds11 with SMTP id ds11so10128607wgb.12 for ; Tue, 20 Dec 2011 02:41:48 -0800 (PST) Received: by 10.180.72.133 with SMTP id d5mr3448538wiv.7.1324377708431; Tue, 20 Dec 2011 02:41:48 -0800 (PST) Received: from scottsdale.localnet (bl16-14-157.dsl.telepac.pt. [188.81.14.157]) by mx.google.com with ESMTPS id fo18sm1444894wbb.12.2011.12.20.02.41.45 (version=SSLv3 cipher=OTHER); Tue, 20 Dec 2011 02:41:46 -0800 (PST) From: Pedro Alves To: gdb-patches@sourceware.org, Eli Zaretskii Subject: Re: Code formatting [Re: [patch] s390*: watchpoints regression [repost]] Date: Tue, 20 Dec 2011 14:29:00 -0000 User-Agent: KMail/1.13.6 (Linux/2.6.38-13-generic; KDE/4.7.2; x86_64; ; ) Cc: Jan Kratochvil , mark.kettenis@xs4all.nl, brobecker@adacore.com References: <20111218115931.GA22952@host2.jankratochvil.net> <20111218172418.GA30764@host2.jankratochvil.net> <83r501zrjw.fsf@gnu.org> In-Reply-To: <83r501zrjw.fsf@gnu.org> MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Message-Id: <201112201041.44282.alves.ped@gmail.com> X-IsSubscribed: yes 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: 2011-12/txt/msg00658.txt.bz2 On Sunday 18 December 2011 18:02:43, Eli Zaretskii wrote: > > Date: Sun, 18 Dec 2011 18:24:18 +0100 > > From: Jan Kratochvil > > Cc: Mark Kettenis , brobecker@adacore.com, > > gdb-patches@sourceware.org, pedro@codesourcery.com > > > > You dropped the important part about "still going through the shell", that was > > the surprising fact to note there. > > > > If you do not drop that shell part of the text the Pedro's text becomes > > shorter, therefore more clear. > > Then don't drop it. I think I dropped it by mistake. Anyway, it was > just an example of how to reword a comment to avoid the problem that > started this thread. Thanks. Here's what I checked in. 2011-12-20 Pedro Alves Jan Kratochvil * linux-nat.c (add_lwp): Don't call linux_nat_new_thread on the first LWP. * amd64-linux-nat.c (update_debug_registers_callback): Instantiate `lwp->arch_private' if NULL. (amd64_linux_prepare_to_resume): Do nothing if `lwp->arch_private' is NULL. * i386-linux-nat.c (update_debug_registers_callback): Instantiate `lwp->arch_private' if NULL. (i386_linux_prepare_to_resume): Do nothing if `lwp->arch_private' is NULL. --- gdb/amd64-linux-nat.c | 9 +++++++++ gdb/i386-linux-nat.c | 9 +++++++++ gdb/linux-nat.c | 10 +++++++++- 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index 288160b..865b971 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -343,6 +343,9 @@ amd64_linux_dr_get_status (void) static int update_debug_registers_callback (struct lwp_info *lwp, void *arg) { + if (lwp->arch_private == NULL) + lwp->arch_private = XCNEW (struct arch_lwp_info); + /* The actual update is done later just before resuming the lwp, we just mark that the registers need updating. */ lwp->arch_private->debug_registers_changed = 1; @@ -386,6 +389,12 @@ amd64_linux_prepare_to_resume (struct lwp_info *lwp) { int clear_status = 0; + /* NULL means this is the main thread still going through the shell, + or, no watchpoint has been set yet. In that case, there's + nothing to do. */ + if (lwp->arch_private == NULL) + return; + if (lwp->arch_private->debug_registers_changed) { struct i386_debug_reg_state *state = i386_debug_reg_state (); diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c index 190979b..4527913 100644 --- a/gdb/i386-linux-nat.c +++ b/gdb/i386-linux-nat.c @@ -715,6 +715,9 @@ i386_linux_dr_get_status (void) static int update_debug_registers_callback (struct lwp_info *lwp, void *arg) { + if (lwp->arch_private == NULL) + lwp->arch_private = XCNEW (struct arch_lwp_info); + /* The actual update is done later just before resuming the lwp, we just mark that the registers need updating. */ lwp->arch_private->debug_registers_changed = 1; @@ -758,6 +761,12 @@ i386_linux_prepare_to_resume (struct lwp_info *lwp) { int clear_status = 0; + /* NULL means this is the main thread still going through the shell, + or, no watchpoint has been set yet. In that case, there's + nothing to do. */ + if (lwp->arch_private == NULL) + return; + if (lwp->arch_private->debug_registers_changed) { struct i386_debug_reg_state *state = i386_debug_reg_state (); diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 1cbfc44..e5f7c3e 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -1151,7 +1151,15 @@ add_lwp (ptid_t ptid) lp->next = lwp_list; lwp_list = lp; - if (linux_nat_new_thread != NULL) + /* Let the arch specific bits know about this new thread. Current + clients of this callback take the opportunity to install + watchpoints in the new thread. Don't do this for the first + thread though. If we're spawning a child ("run"), the thread + executes the shell wrapper first, and we shouldn't touch it until + it execs the program we want to debug. For "attach", it'd be + okay to call the callback, but it's not necessary, because + watchpoints can't yet have been inserted into the inferior. */ + if (num_lwps (GET_PID (ptid)) > 1 && linux_nat_new_thread != NULL) linux_nat_new_thread (lp); return lp;