Lines Matching refs:regs

179 static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)  in save_sigregs32()  argument
184 user_sregs.regs.psw.mask = (__u32)(regs->psw.mask >> 32); in save_sigregs32()
185 user_sregs.regs.psw.mask &= PSW32_MASK_USER | PSW32_MASK_RI; in save_sigregs32()
186 user_sregs.regs.psw.mask |= PSW32_USER_BITS; in save_sigregs32()
187 user_sregs.regs.psw.addr = (__u32) regs->psw.addr | in save_sigregs32()
188 (__u32)(regs->psw.mask & PSW_MASK_BA); in save_sigregs32()
190 user_sregs.regs.gprs[i] = (__u32) regs->gprs[i]; in save_sigregs32()
191 memcpy(&user_sregs.regs.acrs, current->thread.acrs, in save_sigregs32()
192 sizeof(user_sregs.regs.acrs)); in save_sigregs32()
199 static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs) in restore_sigregs32() argument
207 if (__copy_from_user(&user_sregs, &sregs->regs, sizeof(user_sregs))) in restore_sigregs32()
210 if (!is_ri_task(current) && (user_sregs.regs.psw.mask & PSW32_MASK_RI)) in restore_sigregs32()
218 regs->psw.mask = (regs->psw.mask & ~(PSW_MASK_USER | PSW_MASK_RI)) | in restore_sigregs32()
219 (__u64)(user_sregs.regs.psw.mask & PSW32_MASK_USER) << 32 | in restore_sigregs32()
220 (__u64)(user_sregs.regs.psw.mask & PSW32_MASK_RI) << 32 | in restore_sigregs32()
221 (__u64)(user_sregs.regs.psw.addr & PSW32_ADDR_AMODE); in restore_sigregs32()
223 if ((regs->psw.mask & PSW_MASK_ASC) == PSW_ASC_HOME) in restore_sigregs32()
224 regs->psw.mask = PSW_ASC_PRIMARY | in restore_sigregs32()
225 (regs->psw.mask & ~PSW_MASK_ASC); in restore_sigregs32()
226 regs->psw.addr = (__u64)(user_sregs.regs.psw.addr & PSW32_ADDR_INSN); in restore_sigregs32()
228 regs->gprs[i] = (__u64) user_sregs.regs.gprs[i]; in restore_sigregs32()
229 memcpy(&current->thread.acrs, &user_sregs.regs.acrs, in restore_sigregs32()
233 clear_pt_regs_flag(regs, PIF_SYSCALL); /* No longer in a system call */ in restore_sigregs32()
237 static int save_sigregs_ext32(struct pt_regs *regs, in save_sigregs_ext32() argument
246 gprs_high[i] = regs->gprs[i] >> 32; in save_sigregs_ext32()
265 static int restore_sigregs_ext32(struct pt_regs *regs, in restore_sigregs_ext32() argument
277 *(__u32 *)&regs->gprs[i] = gprs_high[i]; in restore_sigregs_ext32()
295 struct pt_regs *regs = task_pt_regs(current); in COMPAT_SYSCALL_DEFINE0() local
296 sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15]; in COMPAT_SYSCALL_DEFINE0()
305 if (restore_sigregs32(regs, &frame->sregs)) in COMPAT_SYSCALL_DEFINE0()
307 if (restore_sigregs_ext32(regs, &frame->sregs_ext)) in COMPAT_SYSCALL_DEFINE0()
310 return regs->gprs[2]; in COMPAT_SYSCALL_DEFINE0()
318 struct pt_regs *regs = task_pt_regs(current); in COMPAT_SYSCALL_DEFINE0() local
319 rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15]; in COMPAT_SYSCALL_DEFINE0()
330 if (restore_sigregs32(regs, &frame->uc.uc_mcontext)) in COMPAT_SYSCALL_DEFINE0()
332 if (restore_sigregs_ext32(regs, &frame->uc.uc_mcontext_ext)) in COMPAT_SYSCALL_DEFINE0()
335 return regs->gprs[2]; in COMPAT_SYSCALL_DEFINE0()
350 get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) in get_sigframe() argument
355 sp = (unsigned long) A(regs->gprs[15]); in get_sigframe()
371 struct pt_regs *regs) in setup_frame32() argument
388 frame = get_sigframe(&ksig->ka, regs, frame_size); in setup_frame32()
393 if (__put_user(regs->gprs[15], (unsigned int __user *) frame)) in setup_frame32()
406 if (save_sigregs32(regs, &frame->sregs)) in setup_frame32()
410 if (__put_user(regs->gprs[2], (int __force __user *) &frame->signo)) in setup_frame32()
414 if (save_sigregs_ext32(regs, &frame->sregs_ext)) in setup_frame32()
431 regs->gprs[14] = restorer; in setup_frame32()
432 regs->gprs[15] = (__force __u64) frame; in setup_frame32()
434 regs->psw.mask = PSW_MASK_BA | in setup_frame32()
436 (regs->psw.mask & ~PSW_MASK_ASC); in setup_frame32()
437 regs->psw.addr = (__force __u64) ksig->ka.sa.sa_handler; in setup_frame32()
439 regs->gprs[2] = sig; in setup_frame32()
440 regs->gprs[3] = (__force __u64) &frame->sc; in setup_frame32()
447 regs->gprs[4] = regs->int_code & 127; in setup_frame32()
448 regs->gprs[5] = regs->int_parm_long; in setup_frame32()
449 regs->gprs[6] = task_thread_info(current)->last_break; in setup_frame32()
456 struct pt_regs *regs) in setup_rt_frame32() argument
477 frame = get_sigframe(&ksig->ka, regs, frame_size); in setup_rt_frame32()
482 if (__put_user(regs->gprs[15], (unsigned int __force __user *) frame)) in setup_rt_frame32()
508 __compat_save_altstack(&frame->uc.uc_stack, regs->gprs[15]) || in setup_rt_frame32()
509 save_sigregs32(regs, &frame->uc.uc_mcontext) || in setup_rt_frame32()
511 save_sigregs_ext32(regs, &frame->uc.uc_mcontext_ext)) in setup_rt_frame32()
515 regs->gprs[14] = restorer; in setup_rt_frame32()
516 regs->gprs[15] = (__force __u64) frame; in setup_rt_frame32()
518 regs->psw.mask = PSW_MASK_BA | in setup_rt_frame32()
520 (regs->psw.mask & ~PSW_MASK_ASC); in setup_rt_frame32()
521 regs->psw.addr = (__u64 __force) ksig->ka.sa.sa_handler; in setup_rt_frame32()
523 regs->gprs[2] = ksig->sig; in setup_rt_frame32()
524 regs->gprs[3] = (__force __u64) &frame->info; in setup_rt_frame32()
525 regs->gprs[4] = (__force __u64) &frame->uc; in setup_rt_frame32()
526 regs->gprs[5] = task_thread_info(current)->last_break; in setup_rt_frame32()
535 struct pt_regs *regs) in handle_signal32() argument
541 ret = setup_rt_frame32(ksig, oldset, regs); in handle_signal32()
543 ret = setup_frame32(ksig, oldset, regs); in handle_signal32()