From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106151 invoked by alias); 24 Mar 2015 12:28:12 -0000 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 Received: (qmail 106142 invoked by uid 89); 24 Mar 2015 12:28:11 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS,T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 24 Mar 2015 12:28:06 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t2OCS30e017476 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 24 Mar 2015 08:28:03 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t2OCS13g027922; Tue, 24 Mar 2015 08:28:02 -0400 Message-ID: <55115851.6070201@redhat.com> Date: Tue, 24 Mar 2015 12:28:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Don Breazeal , gdb-patches@sourceware.org Subject: Re: [PATCH v6 5/6] Remote follow vfork References: <1424997977-13316-1-git-send-email-donb@codesourcery.com> <1426625788-4469-1-git-send-email-donb@codesourcery.com> <1426625788-4469-6-git-send-email-donb@codesourcery.com> In-Reply-To: <1426625788-4469-6-git-send-email-donb@codesourcery.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-03/txt/msg00788.txt.bz2 On 03/17/2015 08:56 PM, Don Breazeal wrote: > diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c > index dc43e38..42c3ec5 100644 > --- a/gdb/gdbserver/remote-utils.c > +++ b/gdb/gdbserver/remote-utils.c > @@ -1115,15 +1115,19 @@ prepare_resume_reply (char *buf, ptid_t ptid, > { > case TARGET_WAITKIND_STOPPED: > case TARGET_WAITKIND_FORKED: > + case TARGET_WAITKIND_VFORKED: > { > struct thread_info *saved_thread; > const char **regp; > struct regcache *regcache; > > - if (status->kind == TARGET_WAITKIND_FORKED && report_fork_events) > + if ((status->kind == TARGET_WAITKIND_FORKED && report_fork_events) > + || (status->kind == TARGET_WAITKIND_VFORKED > + && report_vfork_events)) > { > enum gdb_signal signal = GDB_SIGNAL_TRAP; > - const char *event = "xfork"; > + const char *event = (status->kind == TARGET_WAITKIND_FORKED > + ? "xfork" : "vfork"); > > sprintf (buf, "T%02x%s:", signal, event); > buf += strlen (buf); > @@ -1245,6 +1249,15 @@ prepare_resume_reply (char *buf, ptid_t ptid, > else > sprintf (buf, "X%02x", status->value.sig); > break; > + case TARGET_WAITKIND_VFORK_DONE: > + if (multi_process) > + { > + enum gdb_signal signal = GDB_SIGNAL_TRAP; > + const char *event = "vforkdone"; > + Should only include vforkdone if report_vfork_events is true, I'd think. > + sprintf (buf, "T%02x%s:;", signal, event); > + } > + break; > default: > error ("unhandled waitkind"); > break; > diff --git a/gdb/gdbserver/server.h b/gdb/gdbserver/server.h > index 696a24e..09a5624 100644 > --- a/gdb/gdbserver/server.h > +++ b/gdb/gdbserver/server.h > @@ -85,6 +85,7 @@ extern int disable_packet_qfThreadInfo; > extern int run_once; > extern int multi_process; > extern int report_fork_events; > +extern int report_vfork_events; > extern int non_stop; > > /* True if the "swbreak+" feature is active. In that case, GDB wants > diff --git a/gdb/remote.c b/gdb/remote.c > index 899c7a2..d1ba62d 100644 > --- a/gdb/remote.c > +++ b/gdb/remote.c > @@ -4526,15 +4526,20 @@ remote_follow_fork (struct target_ops *ops, int follow_child, > { > struct remote_state *rs = get_remote_state (); > > + /* If fork events aren't supported, then return. We know that if > + fork events are supported, then so are vfork events, since they > + were both introduced in the same version of the linux kernel. */ "Linux", caps. But this really doesn't make sense -- if we define different qSupported features for fork and vfork, then we should check them separately. We don't know (and shouldn't care) whether we're debugging against a Linux target here. The packets/features should work with other OSs. > if (remote_fork_event_p (rs)) > { > if (detach_fork && !follow_child) > { > ptid_t parent_ptid; > ptid_t child_ptid; > + enum target_waitkind kind; > Thanks, Pedro Alves