This is the mail archive of the
mailing list for the glibc project.
PING: [PATCH] x86: Add __sigsetjmp_cancel and __setjmp_cancel
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Florian Weimer <fw at deneb dot enyo dot de>
- Cc: Joseph Myers <joseph at codesourcery dot com>, "Carlos O'Donell" <carlos at redhat dot com>, "Tsimbalist, Igor V" <igor dot v dot tsimbalist at intel dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Thu, 29 Mar 2018 07:32:36 -0700
- Subject: PING: [PATCH] x86: Add __sigsetjmp_cancel and __setjmp_cancel
On Thu, Mar 22, 2018 at 1:59 PM, H.J. Lu <firstname.lastname@example.org> wrote:
> On Fri, Mar 16, 2018 at 4:28 AM, H.J. Lu <email@example.com> wrote:
>> On Fri, Mar 16, 2018 at 1:24 AM, Florian Weimer <firstname.lastname@example.org> wrote:
>>> * H. J. Lu:
>>>> +/* Function used in the macros. */
>>>> +struct __jmp_buf_tag;
>>>> +extern int __sigsetjmp_cancel (struct __jmp_buf_tag *__env, int __savemask)
>>>> + __THROWNL __attribute_returns_twice__;
>>> How is __THROWNL correct here? We do unwind through this function.
>>> The __EXCEPTIONS guard is not effective because of LTO, and some
>>> applications undefine __EXCEPTIONS to avoid the table-based
>>> cancellation handlers.
>> This is moved from <pthread.h>:
>> /* Function used in the macros. */
>> struct __jmp_buf_tag;
>> extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL;
>> Is <pthread.h> wrong?
> It turns out that since libpthread provides compatible versions of
> longjmp and siglongjmp
> which don't save and restore shadow stack, new versions of longjmp
> and siglongjmp,
> which save and restore shadow stack, should be added to libc.
> Otherwise, porgrams
> linked with libpthread will pick the wrong longjmp.
> Here is the updated patch. OK for master?