diff options
| -rw-r--r-- | arch/h8300/kernel/signal.c | 14 | ||||
| -rw-r--r-- | arch/h8300/kernel/syscalls.S | 15 |
2 files changed, 6 insertions, 23 deletions
diff --git a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c index 2d37418c04fb..635ece1c5d20 100644 --- a/arch/h8300/kernel/signal.c +++ b/arch/h8300/kernel/signal.c | |||
| @@ -129,9 +129,9 @@ struct rt_sigframe | |||
| 129 | } __attribute__((aligned(2),packed)); | 129 | } __attribute__((aligned(2),packed)); |
| 130 | 130 | ||
| 131 | static inline int | 131 | static inline int |
| 132 | restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, | 132 | restore_sigcontext(struct sigcontext *usc, int *pd0) |
| 133 | int *pd0) | ||
| 134 | { | 133 | { |
| 134 | struct pt_regs *regs = current_pt_regs(); | ||
| 135 | int err = 0; | 135 | int err = 0; |
| 136 | unsigned int ccr; | 136 | unsigned int ccr; |
| 137 | unsigned int usp; | 137 | unsigned int usp; |
| @@ -160,9 +160,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, | |||
| 160 | return err; | 160 | return err; |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | asmlinkage int do_sigreturn(unsigned long __unused,...) | 163 | asmlinkage int sys_sigreturn(void) |
| 164 | { | 164 | { |
| 165 | struct pt_regs *regs = (struct pt_regs *) (&__unused - 1); | ||
| 166 | unsigned long usp = rdusp(); | 165 | unsigned long usp = rdusp(); |
| 167 | struct sigframe *frame = (struct sigframe *)(usp - 4); | 166 | struct sigframe *frame = (struct sigframe *)(usp - 4); |
| 168 | sigset_t set; | 167 | sigset_t set; |
| @@ -178,7 +177,7 @@ asmlinkage int do_sigreturn(unsigned long __unused,...) | |||
| 178 | 177 | ||
| 179 | set_current_blocked(&set); | 178 | set_current_blocked(&set); |
| 180 | 179 | ||
| 181 | if (restore_sigcontext(regs, &frame->sc, &er0)) | 180 | if (restore_sigcontext(&frame->sc, &er0)) |
| 182 | goto badframe; | 181 | goto badframe; |
| 183 | return er0; | 182 | return er0; |
| 184 | 183 | ||
| @@ -187,9 +186,8 @@ badframe: | |||
| 187 | return 0; | 186 | return 0; |
| 188 | } | 187 | } |
| 189 | 188 | ||
| 190 | asmlinkage int do_rt_sigreturn(unsigned long __unused,...) | 189 | asmlinkage int sys_rt_sigreturn(void) |
| 191 | { | 190 | { |
| 192 | struct pt_regs *regs = (struct pt_regs *) &__unused; | ||
| 193 | unsigned long usp = rdusp(); | 191 | unsigned long usp = rdusp(); |
| 194 | struct rt_sigframe *frame = (struct rt_sigframe *)(usp - 4); | 192 | struct rt_sigframe *frame = (struct rt_sigframe *)(usp - 4); |
| 195 | sigset_t set; | 193 | sigset_t set; |
| @@ -202,7 +200,7 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused,...) | |||
| 202 | 200 | ||
| 203 | set_current_blocked(&set); | 201 | set_current_blocked(&set); |
| 204 | 202 | ||
| 205 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0)) | 203 | if (restore_sigcontext(&frame->uc.uc_mcontext, &er0)) |
| 206 | goto badframe; | 204 | goto badframe; |
| 207 | 205 | ||
| 208 | if (restore_altstack(&frame->uc.uc_stack)) | 206 | if (restore_altstack(&frame->uc.uc_stack)) |
diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S index b74dd0ade58d..5c2168fb9b9e 100644 --- a/arch/h8300/kernel/syscalls.S +++ b/arch/h8300/kernel/syscalls.S | |||
| @@ -334,18 +334,3 @@ SYMBOL_NAME_LABEL(sys_call_table) | |||
| 334 | .long SYMBOL_NAME(sys_getcpu) | 334 | .long SYMBOL_NAME(sys_getcpu) |
| 335 | .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_pwait */ | 335 | .long SYMBOL_NAME(sys_ni_syscall) /* sys_epoll_pwait */ |
| 336 | .long SYMBOL_NAME(sys_setns) /* 320 */ | 336 | .long SYMBOL_NAME(sys_setns) /* 320 */ |
| 337 | |||
| 338 | .macro call_sp addr | ||
| 339 | mov.l #SYMBOL_NAME(\addr),er6 | ||
| 340 | bra SYMBOL_NAME(syscall_trampoline):8 | ||
| 341 | .endm | ||
| 342 | |||
| 343 | SYMBOL_NAME_LABEL(sys_sigreturn) | ||
| 344 | call_sp do_sigreturn | ||
| 345 | |||
| 346 | SYMBOL_NAME_LABEL(sys_rt_sigreturn) | ||
| 347 | call_sp do_rt_sigreturn | ||
| 348 | |||
| 349 | SYMBOL_NAME_LABEL(syscall_trampoline) | ||
| 350 | mov.l sp,er0 | ||
| 351 | jmp @er6 | ||
