This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFA] Fix crash in "run" on macOS when gdb is not signed
- From: Pedro Alves <palves at redhat dot com>
- To: Tom Tromey <tom at tromey dot com>, gdb-patches at sourceware dot org
- Date: Fri, 29 Jun 2018 20:31:33 +0100
- Subject: Re: [RFA] Fix crash in "run" on macOS when gdb is not signed
- References: <20180628180257.29883-1-tom@tromey.com>
On 06/28/2018 07:02 PM, Tom Tromey wrote:
> On macOS, when gdb is not code-signed, it will throw an exception from
> darwin_attach_pid. However, gdb also then crashes:
>
> thread.c:93: internal-error: struct thread_info *inferior_thread(): Assertion `tp' failed.
>
> I think the problem here is that darwin_attach_pid does not clean up
> inferior_ptid and inf->pid on failure. This leads to a situation
> where gdb tries to find a thread, but cannot.
>
> In other cases, gdb would mourn the inferior at this point; but here
> this is not possible because the target has not been pushed. Instead
> this patch works by simply updating the inferior and inferior_ptid on
> failure.
>
> Tested by building an unsigned gdb on macOS and trying to run an
> inferior.
I'd try also with "attach", see if something else needs
cleaning up / unwinding.
> diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
> index 7dccce73926..6fb108846d0 100644
> --- a/gdb/darwin-nat.c
> +++ b/gdb/darwin-nat.c
> @@ -1583,77 +1583,92 @@ darwin_attach_pid (struct inferior *inf)
> darwin_inferior *priv = new darwin_inferior;
> inf->priv.reset (priv);
>
> - kret = task_for_pid (gdb_task, inf->pid, &priv->task);
> - if (kret != KERN_SUCCESS)
> + TRY
> {
[snip reindent]
> + }
> + CATCH (ex, RETURN_MASK_ALL)
> + {
> + inf->pid = 0;
If you try this with MI as is, I think gdb will output a
-thread-group-started notification, and then an ^error.
You may want to call exit_inferior instead so that
gdb outputs a matching -thread-group-exited.
Otherwise looks fine to me.
Thanks,
Pedro Alves