4b84c69b5f
Have most signals go through an arch-provided handler which recovers the sigcontext and then calls a generic handler. This replaces the ARCH_GET_SIGCONTEXT macro, which was somewhat fragile. On x86_64, recovering %rdx (which holds the sigcontext pointer) must be the first thing that happens. sig_handler duly invokes that first, but there is no guarantee that I can see that instructions won't be reordered such that %rdx is used before that. Having the arch provide the handler seems much more robust. Some signals in some parts of UML require their own handlers - these places don't call set_handler any more. They call sigaction or signal themselves. Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
17 lines
321 B
C
17 lines
321 B
C
/*
|
|
* Copyright (C) 2006 Jeff Dike (jdike@addtoit.com)
|
|
* Licensed under the GPL
|
|
*/
|
|
|
|
#include <signal.h>
|
|
|
|
extern void (*handlers[])(int sig, struct sigcontext *sc);
|
|
|
|
void hard_handler(int sig)
|
|
{
|
|
struct ucontext *uc;
|
|
asm("movq %%rdx, %0" : "=r" (uc));
|
|
|
|
(*handlers[sig])(sig, (struct sigcontext *) &uc->uc_mcontext);
|
|
}
|