Lines Matching refs:regs

27 #include <asm/access-regs.h>
68 static int save_sigregs32(struct pt_regs *regs, _sigregs32 __user *sregs)
73 user_sregs.regs.psw.mask = (__u32)(regs->psw.mask >> 32);
74 user_sregs.regs.psw.mask &= PSW32_MASK_USER | PSW32_MASK_RI;
75 user_sregs.regs.psw.mask |= PSW32_USER_BITS;
76 user_sregs.regs.psw.addr = (__u32) regs->psw.addr |
77 (__u32)(regs->psw.mask & PSW_MASK_BA);
79 user_sregs.regs.gprs[i] = (__u32) regs->gprs[i];
80 memcpy(&user_sregs.regs.acrs, current->thread.acrs,
81 sizeof(user_sregs.regs.acrs));
88 static int restore_sigregs32(struct pt_regs *regs,_sigregs32 __user *sregs)
96 if (__copy_from_user(&user_sregs, &sregs->regs, sizeof(user_sregs)))
99 if (!is_ri_task(current) && (user_sregs.regs.psw.mask & PSW32_MASK_RI))
102 /* Use regs->psw.mask instead of PSW_USER_BITS to preserve PER bit. */
103 regs->psw.mask = (regs->psw.mask & ~(PSW_MASK_USER | PSW_MASK_RI)) |
104 (__u64)(user_sregs.regs.psw.mask & PSW32_MASK_USER) << 32 |
105 (__u64)(user_sregs.regs.psw.mask & PSW32_MASK_RI) << 32 |
106 (__u64)(user_sregs.regs.psw.addr & PSW32_ADDR_AMODE);
108 if ((regs->psw.mask & PSW_MASK_ASC) == PSW_ASC_HOME)
109 regs->psw.mask = PSW_ASC_PRIMARY |
110 (regs->psw.mask & ~PSW_MASK_ASC);
111 regs->psw.addr = (__u64)(user_sregs.regs.psw.addr & PSW32_ADDR_INSN);
113 regs->gprs[i] = (__u64) user_sregs.regs.gprs[i];
114 memcpy(&current->thread.acrs, &user_sregs.regs.acrs,
118 clear_pt_regs_flag(regs, PIF_SYSCALL); /* No longer in a system call */
122 static int save_sigregs_ext32(struct pt_regs *regs,
131 gprs_high[i] = regs->gprs[i] >> 32;
150 static int restore_sigregs_ext32(struct pt_regs *regs,
162 *(__u32 *)&regs->gprs[i] = gprs_high[i];
180 struct pt_regs *regs = task_pt_regs(current);
181 sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15];
188 if (restore_sigregs32(regs, &frame->sregs))
190 if (restore_sigregs_ext32(regs, &frame->sregs_ext))
193 return regs->gprs[2];
201 struct pt_regs *regs = task_pt_regs(current);
202 rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15];
211 if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
213 if (restore_sigregs_ext32(regs, &frame->uc.uc_mcontext_ext))
216 return regs->gprs[2];
231 get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size)
236 sp = (unsigned long) A(regs->gprs[15]);
252 struct pt_regs *regs)
268 frame = get_sigframe(&ksig->ka, regs, frame_size);
273 if (__put_user(regs->gprs[15], (unsigned int __user *) frame))
287 if (save_sigregs32(regs, &frame->sregs))
291 if (__put_user(regs->gprs[2], (int __force __user *) &frame->signo))
295 if (save_sigregs_ext32(regs, &frame->sregs_ext))
308 regs->gprs[14] = restorer;
309 regs->gprs[15] = (__force __u64) frame;
311 regs->psw.mask = PSW_MASK_BA |
313 (regs->psw.mask & ~PSW_MASK_ASC);
314 regs->psw.addr = (__force __u64) ksig->ka.sa.sa_handler;
316 regs->gprs[2] = sig;
317 regs->gprs[3] = (__force __u64) &frame->sc;
324 regs->gprs[4] = regs->int_code & 127;
325 regs->gprs[5] = regs->int_parm_long;
326 regs->gprs[6] = current->thread.last_break;
333 struct pt_regs *regs)
354 frame = get_sigframe(&ksig->ka, regs, frame_size);
359 if (__put_user(regs->gprs[15], (unsigned int __force __user *) frame))
381 __compat_save_altstack(&frame->uc.uc_stack, regs->gprs[15]) ||
382 save_sigregs32(regs, &frame->uc.uc_mcontext) ||
384 save_sigregs_ext32(regs, &frame->uc.uc_mcontext_ext))
388 regs->gprs[14] = restorer;
389 regs->gprs[15] = (__force __u64) frame;
391 regs->psw.mask = PSW_MASK_BA |
393 (regs->psw.mask & ~PSW_MASK_ASC);
394 regs->psw.addr = (__u64 __force) ksig->ka.sa.sa_handler;
396 regs->gprs[2] = ksig->sig;
397 regs->gprs[3] = (__force __u64) &frame->info;
398 regs->gprs[4] = (__force __u64) &frame->uc;
399 regs->gprs[5] = current->thread.last_break;
408 struct pt_regs *regs)
414 ret = setup_rt_frame32(ksig, oldset, regs);
416 ret = setup_frame32(ksig, oldset, regs);