This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 0/2] nptl: Update struct pthread_unwind_buf


* H. J. Lu:

> On Sun, Feb 25, 2018 at 5:49 AM, Florian Weimer <fw@deneb.enyo.de> wrote:
>> * H. J. Lu:
>>
>>> On Sun, Feb 25, 2018 at 5:31 AM, Florian Weimer <fw@deneb.enyo.de> 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_Reason_Code
> _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
>       void *stop_argument)
> {
>   if (__glibc_unlikely (libgcc_s_handle == NULL))
>     pthread_cancel_init ();
>   else
>     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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]