X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fs390%2Fkernel%2Fsignal.c;h=d5b6481532ad3a1fe2538388f18a01fc93c2158a;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=d32b2c44b71ad86824fb07495a004ca8f0e2d548;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index d32b2c44b..d5b648153 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c @@ -39,6 +39,7 @@ typedef struct __u8 callee_used_stack[__SIGNAL_FRAMESIZE]; struct sigcontext sc; _sigregs sregs; + int signo; __u8 retcode[S390_SYSCALL_SIZE]; } sigframe; @@ -350,6 +351,10 @@ static void setup_frame(int sig, struct k_sigaction *ka, To avoid breaking binary compatibility, they are passed as args. */ regs->gprs[4] = current->thread.trap_no; regs->gprs[5] = current->thread.prot_addr; + + /* Place signal number on stack to allow backtrace from handler. */ + if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) + goto give_sigsegv; return; give_sigsegv: