Consensus on MT-, AS- and AC-Safety docs.
Carlos O'Donell
carlos@redhat.com
Tue Dec 3 15:27:00 GMT 2013
On 12/03/2013 08:49 AM, Florian Weimer wrote:
> On 11/29/2013 06:58 PM, Rich Felker wrote:
>> On Fri, Nov 29, 2013 at 12:21:02AM -0500, Carlos O'Donell wrote:
>>> All we need to do is extend the kernel infrastructure to create a
>>> signal entry trampoline like it does for signal return. This
>>> isn't impossible, but requires work.
>>
>> Kernel help is not required for this. You just set set the signal
>> handler address to your wrapper in libc when making the
>> rt_sigaction syscall, and then have the wrapper call the real
>> signal handler function, whose address is stored in userspace.
>> There are some nasty atomicity/synchronization issues to cover with
>> the race window between the rt_sigaction syscall (which might
>> change flags affecting how the signal handler runs even though the
>> new handler address will always be the same) and replacing the
>> pointer in userspace, and keeping this entire operation AS-safe,
>> but I'm pretty sure it's possible.
>
> What should we do about this? Try to get clarification from Austin
> Group first what's the intended behavior here, or if they intend to
> specify a certain behavior in the future?
>
I think that's certainly the right start. File a defect with the
Austin Group tracker and ask them the following things:
* What if any unintended consequences could there be if the
implementation choose to save and restore errno during
signal handling?
* Was it ever POSIX's intent to allow a signal handler to
modify the errno of the interrupted code sequence or was
that simply a consequence of being a signal handler and
modifying global state?
... and anything else you think we should get an expert opinion
on before embarking upon a change like this.
Cheers,
Carlos.
More information about the Libc-alpha
mailing list