12 #include <linux/sched.h>
15 #include <linux/kernel.h>
16 #include <linux/signal.h>
17 #include <linux/errno.h>
18 #include <linux/wait.h>
19 #include <linux/ptrace.h>
21 #include <linux/stddef.h>
22 #include <linux/tty.h>
23 #include <linux/personality.h>
24 #include <linux/binfmts.h>
25 #include <asm/ucontext.h>
26 #include <asm/uaccess.h>
28 #include <asm/switch_to.h>
84 err |=
__put_user(from->si_utime, &to->si_utime);
85 err |=
__put_user(from->si_stime, &to->si_stime);
86 err |=
__put_user(from->si_status, &to->si_status);
89 err |=
__put_user((
unsigned long) from->si_addr,
93 err |=
__put_user(from->si_band, &to->si_band);
98 err |=
__put_user(from->si_overrun, &to->si_overrun);
135 err |=
__get_user(to->si_utime, &from->si_utime);
136 err |=
__get_user(to->si_stime, &from->si_stime);
137 err |=
__get_user(to->si_status, &from->si_status);
145 err |=
__get_user(to->si_band, &from->si_band);
150 err |=
__get_user(to->si_overrun, &from->si_overrun);
177 new_ka.
sa.sa_restorer = (
void (*)(
void)) sa_restorer;
178 siginitset(&new_ka.
sa.sa_mask, mask);
184 sa_handler = (
unsigned long) old_ka.
sa.sa_handler;
185 sa_restorer = (
unsigned long) old_ka.
sa.sa_restorer;
188 __put_user(sa_restorer, &oact->sa_restorer) ||
199 struct sigaction32 __user *oact,
size_t sigsetsize)
204 compat_sigset_t set32;
207 if (sigsetsize !=
sizeof(compat_sigset_t))
211 ret =
get_user(sa_handler, &act->sa_handler);
213 sizeof(compat_sigset_t));
214 new_ka.
sa.sa_mask.sig[0] =
215 set32.sig[0] | (((
long)set32.sig[1]) << 32);
226 set32.sig[1] = (old_ka.
sa.sa_mask.sig[0] >> 32);
227 set32.sig[0] = old_ka.
sa.sa_mask.sig[0];
228 ret =
put_user((
unsigned long)old_ka.
sa.sa_handler, &oact->sa_handler);
230 sizeof(compat_sigset_t));
287 save_access_regs(
current->thread.acrs);
292 save_fp_regs(&
current->thread.fp_regs);
320 restore_access_regs(
current->thread.acrs);
328 restore_fp_regs(&
current->thread.fp_regs);
339 gprs_high[i] = regs->
gprs[i] >> 32;
344 static int restore_sigregs_gprs_high(
struct pt_regs *regs,
__u32 __user *uregs)
368 if (restore_sigregs32(regs, &frame->sregs))
370 if (restore_sigregs_gprs_high(regs, frame->gprs_high))
372 return regs->
gprs[2];
393 if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
395 if (restore_sigregs_gprs_high(regs, frame->gprs_high))
397 err =
__get_user(ss_sp, &frame->uc.uc_stack.ss_sp);
398 st.ss_sp = compat_ptr(ss_sp);
399 err |=
__get_user(
st.ss_size, &frame->uc.uc_stack.ss_size);
400 err |=
__get_user(
st.ss_flags, &frame->uc.uc_stack.ss_flags);
406 return regs->
gprs[2];
420 static inline void __user *
429 if (on_sig_stack(sp) && !on_sig_stack((sp - frame_size) & -8
UL))
430 return (
void __user *) -1
UL;
434 if (! sas_ss_flags(sp))
438 return (
void __user *)((sp - frame_size) & -8ul);
441 static inline int map_signal(
int sig)
451 static int setup_frame32(
int sig,
struct k_sigaction *ka,
458 if (frame == (
void __user *) -1
UL)
464 if (save_sigregs32(regs, &frame->sregs))
466 if (save_sigregs_gprs_high(regs, frame->gprs_high))
468 if (
__put_user((
unsigned long) &frame->sregs, &frame->sc.sregs))
494 regs->
gprs[2] = map_signal(sig);
524 if (frame == (
void __user *) -1
UL)
535 &frame->uc.uc_stack.ss_flags);
537 err |= save_sigregs32(regs, &frame->uc.uc_mcontext);
538 err |= save_sigregs_gprs_high(regs, frame->gprs_high);
565 regs->
gprs[2] = map_signal(sig);
586 ret = setup_rt_frame32(sig, ka, info, oldset, regs);
588 ret = setup_frame32(sig, ka, oldset, regs);