From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18457 invoked by alias); 1 Jul 2011 19:03:54 -0000 Received: (qmail 18438 invoked by uid 22791); 1 Jul 2011 19:03:52 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD 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; Fri, 01 Jul 2011 19:03:33 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 751FF2BB536; Fri, 1 Jul 2011 15:03:32 -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 4Oa82I8KhVoS; Fri, 1 Jul 2011 15:03:32 -0400 (EDT) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id 487592BB4CF; Fri, 1 Jul 2011 15:03:32 -0400 (EDT) Received: by joel.gnat.com (Postfix, from userid 1000) id 86530145615; Fri, 1 Jul 2011 12:03:30 -0700 (PDT) From: Joel Brobecker To: gdb-patches@sourceware.org Cc: Joel Brobecker Subject: [Darwin 1/4] detach: Do not resume inferior after ptrace detach Date: Fri, 01 Jul 2011 19:03:00 -0000 Message-Id: <1309547006-21412-2-git-send-email-brobecker@adacore.com> In-Reply-To: <1309547006-21412-1-git-send-email-brobecker@adacore.com> References: <1309547006-21412-1-git-send-email-brobecker@adacore.com> 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-07/txt/msg00050.txt.bz2 When trying to detach from an inferior that we start from the debugger, GDB prints the following warning: (gdb) detach Detaching from program: /[...]/foo, process 74593 warning: Mach error at "/[...]/darwin-nat.c:445" in function "darwin_resume_inferior": (os/kern) failure (0x5) The warning comes from the following code in darwin_detach: darwin_resume_inferior (inf); This is because the process has already been resumed by the PT_DETACH ptrace operation that has just been performed, as documented by the ptrace(2) man page. On the other hand, when trying to detach from an inferior that was started outside of debugger control (thus after having attached the debugger to that inferior), things go smoothly. That's because we don't use ptrace to control the process in that case, and so the resume is perfectly justified. This patch makes sure that we resume the inferior during the detach only when we're NOT using ptrace. gdb/ChangeLog: * darwin-nat.c (darwin_detach): Call darwin_resume_inferior only when inf->private->no_ptrace. Tested on x86_64-darwin. Checked in. --- gdb/ChangeLog | 5 +++++ gdb/darwin-nat.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c37c9a9..5be8066 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2011-07-01 Joel Brobecker + * darwin-nat.c (darwin_detach): Call darwin_resume_inferior + only when inf->private->no_ptrace. + +2011-07-01 Joel Brobecker + * ada-lang.c (print_it_exception): Print temporary catchpoints as "Temporary catchpoint". (print_mention_exception): Likewise. diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c index 7be85d5..fc5263a 100644 --- a/gdb/darwin-nat.c +++ b/gdb/darwin-nat.c @@ -1601,7 +1601,11 @@ darwin_detach (struct target_ops *ops, char *args, int from_tty) darwin_reply_to_all_pending_messages (inf); - darwin_resume_inferior (inf); + /* When using ptrace, we have just performed a PT_DETACH, which + resumes the inferior. On the other hand, when we are not using + ptrace, we need to resume its execution ourselves. */ + if (inf->private->no_ptrace) + darwin_resume_inferior (inf); darwin_mourn_inferior (ops); } -- 1.7.1