From 05af2a7274705fe284aa998876652830822256bc Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Tue, 21 Apr 2009 14:08:47 +0200 Subject: [PATCH] --- yaml --- r: 144148 b: refs/heads/master c: 2921e2bd679949a7892d308b414e6a3b3c705260 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/microblaze/include/asm/entry.h | 3 +++ trunk/arch/microblaze/include/asm/processor.h | 2 ++ trunk/arch/microblaze/kernel/signal.c | 14 ++++++++++---- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index b9ebf784138c..5f31d259f780 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6dfb79aa114ac69032f3931235ffc90799e9630b +refs/heads/master: 2921e2bd679949a7892d308b414e6a3b3c705260 diff --git a/trunk/arch/microblaze/include/asm/entry.h b/trunk/arch/microblaze/include/asm/entry.h index 1019d88b8129..e4c3aef884df 100644 --- a/trunk/arch/microblaze/include/asm/entry.h +++ b/trunk/arch/microblaze/include/asm/entry.h @@ -31,4 +31,7 @@ DECLARE_PER_CPU(unsigned int, R11_SAVE); /* Temp variable for entry */ DECLARE_PER_CPU(unsigned int, CURRENT_SAVE); /* Saved current pointer */ # endif /* __ASSEMBLY__ */ +/* noMMU hasn't any space for args */ +# define STATE_SAVE_ARG_SPACE (0) + #endif /* _ASM_MICROBLAZE_ENTRY_H */ diff --git a/trunk/arch/microblaze/include/asm/processor.h b/trunk/arch/microblaze/include/asm/processor.h index 89aa3956929b..9329029d2614 100644 --- a/trunk/arch/microblaze/include/asm/processor.h +++ b/trunk/arch/microblaze/include/asm/processor.h @@ -15,6 +15,8 @@ #include #include #include +#include +#include # ifndef __ASSEMBLY__ /* from kernel/cpu/mb.c */ diff --git a/trunk/arch/microblaze/kernel/signal.c b/trunk/arch/microblaze/kernel/signal.c index 3889cf45fa71..40d36931e363 100644 --- a/trunk/arch/microblaze/kernel/signal.c +++ b/trunk/arch/microblaze/kernel/signal.c @@ -178,7 +178,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *rval_p) asmlinkage int sys_sigreturn(struct pt_regs *regs) { - struct sigframe *frame = (struct sigframe *)regs->r1; + struct sigframe *frame = + (struct sigframe *)(regs->r1 + STATE_SAVE_ARG_SPACE); + sigset_t set; int rval; @@ -209,7 +211,9 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs) asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) { - struct rt_sigframe *frame = (struct rt_sigframe *)regs->r1; + struct rt_sigframe *frame = + (struct rt_sigframe *)(regs->r1 + STATE_SAVE_ARG_SPACE); + sigset_t set; stack_t st; int rval; @@ -336,7 +340,8 @@ static void setup_frame(int sig, struct k_sigaction *ka, goto give_sigsegv; /* Set up registers for signal handler */ - regs->r1 = (unsigned long) frame; + regs->r1 = (unsigned long) frame - STATE_SAVE_ARG_SPACE; + /* Signal handler args: */ regs->r5 = signal; /* Arg 0: signum */ regs->r6 = (unsigned long) &frame->sc; /* arg 1: sigcontext */ @@ -414,7 +419,8 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, goto give_sigsegv; /* Set up registers for signal handler */ - regs->r1 = (unsigned long) frame; + regs->r1 = (unsigned long) frame - STATE_SAVE_ARG_SPACE; + /* Signal handler args: */ regs->r5 = signal; /* arg 0: signum */ regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */