diff options
Diffstat (limited to 'arch/h8300')
-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 | ||