[PATCH v8 5/7] Remote follow vfork

Pedro Alves palves@redhat.com
Thu Apr 23 14:19:00 GMT 2015


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



More information about the Gdb-patches mailing list