Saving errno around signal handlers
Rich Felker
dalias@aerifal.cx
Sat Mar 1 00:31:00 GMT 2014
On Fri, Feb 28, 2014 at 05:58:54PM +0100, Florian Weimer wrote:
> On 02/28/2014 05:49 PM, Richard Henderson wrote:
> >On 02/28/2014 03:49 AM, Florian Weimer wrote:
> >>
> >>In all cases (kernel and glibc implementation), we can use a tail call to make
> >>sure that the stack layout looks like it is at present (at least on
> >>architectures with an available callee-saved register), and we would not have
> >>to adjust GDB and other tools.
> >
> >How's that? A tail call would not be able to "restore" anything afterward.
>
> We already have the restorer that calls sigreturn, and could add
>
> movq errno@gottpoff(%rip), %rdi
> movl %r12d, %fs:(%rdi)
>
> right before that.
This does not support nested signal handlers. The saved errno must be
on the stack frame of the trampoline calling the real signal handler,
not a fixed TLS location.
Rich
More information about the Libc-alpha
mailing list