diff options
Diffstat (limited to 'arch/microblaze/kernel/signal.c')
-rw-r--r-- | arch/microblaze/kernel/signal.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c index ff347b98863a..40d36931e363 100644 --- a/arch/microblaze/kernel/signal.c +++ b/arch/microblaze/kernel/signal.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <linux/uaccess.h> | 37 | #include <linux/uaccess.h> |
38 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> |
39 | #include <asm/pgalloc.h> | 39 | #include <asm/pgalloc.h> |
40 | #include <linux/signal.h> | ||
41 | #include <linux/syscalls.h> | 40 | #include <linux/syscalls.h> |
42 | #include <asm/cacheflush.h> | 41 | #include <asm/cacheflush.h> |
43 | #include <asm/syscalls.h> | 42 | #include <asm/syscalls.h> |
@@ -179,7 +178,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *rval_p) | |||
179 | 178 | ||
180 | asmlinkage int sys_sigreturn(struct pt_regs *regs) | 179 | asmlinkage int sys_sigreturn(struct pt_regs *regs) |
181 | { | 180 | { |
182 | struct sigframe *frame = (struct sigframe *)regs->r1; | 181 | struct sigframe *frame = |
182 | (struct sigframe *)(regs->r1 + STATE_SAVE_ARG_SPACE); | ||
183 | |||
183 | sigset_t set; | 184 | sigset_t set; |
184 | int rval; | 185 | int rval; |
185 | 186 | ||
@@ -210,7 +211,9 @@ badframe: | |||
210 | 211 | ||
211 | asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) | 212 | asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) |
212 | { | 213 | { |
213 | struct rt_sigframe *frame = (struct rt_sigframe *)regs->r1; | 214 | struct rt_sigframe *frame = |
215 | (struct rt_sigframe *)(regs->r1 + STATE_SAVE_ARG_SPACE); | ||
216 | |||
214 | sigset_t set; | 217 | sigset_t set; |
215 | stack_t st; | 218 | stack_t st; |
216 | int rval; | 219 | int rval; |
@@ -337,7 +340,8 @@ static void setup_frame(int sig, struct k_sigaction *ka, | |||
337 | goto give_sigsegv; | 340 | goto give_sigsegv; |
338 | 341 | ||
339 | /* Set up registers for signal handler */ | 342 | /* Set up registers for signal handler */ |
340 | regs->r1 = (unsigned long) frame; | 343 | regs->r1 = (unsigned long) frame - STATE_SAVE_ARG_SPACE; |
344 | |||
341 | /* Signal handler args: */ | 345 | /* Signal handler args: */ |
342 | regs->r5 = signal; /* Arg 0: signum */ | 346 | regs->r5 = signal; /* Arg 0: signum */ |
343 | regs->r6 = (unsigned long) &frame->sc; /* arg 1: sigcontext */ | 347 | regs->r6 = (unsigned long) &frame->sc; /* arg 1: sigcontext */ |
@@ -415,7 +419,8 @@ static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
415 | goto give_sigsegv; | 419 | goto give_sigsegv; |
416 | 420 | ||
417 | /* Set up registers for signal handler */ | 421 | /* Set up registers for signal handler */ |
418 | regs->r1 = (unsigned long) frame; | 422 | regs->r1 = (unsigned long) frame - STATE_SAVE_ARG_SPACE; |
423 | |||
419 | /* Signal handler args: */ | 424 | /* Signal handler args: */ |
420 | regs->r5 = signal; /* arg 0: signum */ | 425 | regs->r5 = signal; /* arg 0: signum */ |
421 | regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */ | 426 | regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */ |