This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH v8 5/7] Remote follow vfork
- From: Pedro Alves <palves at redhat dot com>
- To: Don Breazeal <donb at codesourcery dot com>, gdb-patches at sourceware dot org
- Date: Thu, 23 Apr 2015 15:19:19 +0100
- Subject: Re: [PATCH v8 5/7] Remote follow vfork
- Authentication-results: sourceware.org; auth=none
- References: <1429304325-13878-1-git-send-email-donb at codesourcery dot com> <1429304325-13878-6-git-send-email-donb at codesourcery dot com>
On 04/17/2015 09:58 PM, Don Breazeal wrote:
> This patch implements follow-fork for vfork on remote and extended-remote
> Linux targets.
Only extended-remote, I think.
> --- a/gdb/gdbserver/remote-utils.c
> +++ b/gdb/gdbserver/remote-utils.c
> @@ -1115,16 +1115,20 @@ 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 = (status->kind == TARGET_WAITKIND_FORKED
> + ? "fork" : "vfork");
>
> - sprintf (buf, "T%02xfork:", signal);
> + sprintf (buf, "T%02x%s:", signal, event);
> buf += strlen (buf);
> buf = write_ptid (buf, status->value.related_pid);
> strcat (buf, ";");
> @@ -1244,6 +1248,15 @@ prepare_resume_reply (char *buf, ptid_t ptid,
> else
> sprintf (buf, "X%02x", status->value.sig);
> break;
> + case TARGET_WAITKIND_VFORK_DONE:
> + if (report_vfork_events)
> + {
> + enum gdb_signal signal = GDB_SIGNAL_TRAP;
> + const char *event = "vforkdone";
static const char event[] = "vforkdone";
> +
> + sprintf (buf, "T%02x%s:", signal, event);
Or just simply:
sprintf (buf, "T%02xvforkdone:", GDB_SIGNAL_TRAP);
> + }
I think this should have a fallback like the TARGET_WAITKIND_FORKED
TARGET_WAITKIND_VFORKED cases:
else
sprintf (buf, "T%02x", GDB_SIGNAL_0);
... in case this was an event that was pending already
when GDB connected, and the connecting gdb doesn't want
or understand those events.
OK with that fixed.
Thanks,
Pedro Alves