This is the mail archive of the
mailing list for the glibc project.
Re: [PATCH 0/2] nptl: Update struct pthread_unwind_buf
* H. J. Lu:
> On Sun, Feb 25, 2018 at 5:49 AM, Florian Weimer <email@example.com> wrote:
>> * H. J. Lu:
>>> On Sun, Feb 25, 2018 at 5:31 AM, Florian Weimer <firstname.lastname@example.org> wrote:
>>>> * H. J. Lu:
>>>>> libpthread cancellation implementation passes cancel_jmp_buf to
>>>>> libgcc unwinder,
>>>> Oh. Where does it do that? If you mean _Unwind_ForcedUnwind, I think
>>>> that's just an opaque closure argument for the callback.
>>> Yes. Libgcc unwinder needs to deal with it.
>> Please point me to the code. Thanks.
> sysdeps/nptl/unwind-forcedunwind.c has
> _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
> void *stop_argument)
> if (__glibc_unlikely (libgcc_s_handle == NULL))
> pthread_cancel_init ();
> atomic_read_barrier ();
> _Unwind_Reason_Code (*forcedunwind)
> (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *)
> = libgcc_s_forcedunwind;
> PTR_DEMANGLE (forcedunwind);
> return forcedunwind (exc, stop, stop_argument);
Thanks. I think stop_argument ends up in the private_2 member inside
unwind.inc, which is only passed back to the callback (the stop
function pointer) in _Unwind_ForcedUnwind_Phase2, and not interpreted
by libgcc itself. So this shouldn't be a problem.