Lines Matching refs:regs
80 static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, in setup_sigcontext() argument
95 unsigned long msr = regs->msr; in setup_sigcontext()
146 err |= __put_user(&sc->gp_regs, &sc->regs); in setup_sigcontext()
147 WARN_ON(!FULL_REGS(regs)); in setup_sigcontext()
148 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); in setup_sigcontext()
172 struct pt_regs *regs, in setup_tm_sigcontexts() argument
189 unsigned long msr = regs->msr; in setup_tm_sigcontexts()
192 BUG_ON(!MSR_TM_ACTIVE(regs->msr)); in setup_tm_sigcontexts()
199 regs->msr &= ~MSR_TS_MASK; in setup_tm_sigcontexts()
280 err |= __put_user(&sc->gp_regs, &sc->regs); in setup_tm_sigcontexts()
281 err |= __put_user(&tm_sc->gp_regs, &tm_sc->regs); in setup_tm_sigcontexts()
282 WARN_ON(!FULL_REGS(regs)); in setup_tm_sigcontexts()
283 err |= __copy_to_user(&tm_sc->gp_regs, regs, GP_REGS_SIZE); in setup_tm_sigcontexts()
301 static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig, in restore_sigcontext() argument
316 save_r13 = regs->gpr[13]; in restore_sigcontext()
319 err |= __copy_from_user(regs->gpr, sc->gp_regs, sizeof(regs->gpr)); in restore_sigcontext()
320 err |= __get_user(regs->nip, &sc->gp_regs[PT_NIP]); in restore_sigcontext()
324 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); in restore_sigcontext()
325 err |= __get_user(regs->orig_gpr3, &sc->gp_regs[PT_ORIG_R3]); in restore_sigcontext()
326 err |= __get_user(regs->ctr, &sc->gp_regs[PT_CTR]); in restore_sigcontext()
327 err |= __get_user(regs->link, &sc->gp_regs[PT_LNK]); in restore_sigcontext()
328 err |= __get_user(regs->xer, &sc->gp_regs[PT_XER]); in restore_sigcontext()
329 err |= __get_user(regs->ccr, &sc->gp_regs[PT_CCR]); in restore_sigcontext()
331 regs->trap = 0; in restore_sigcontext()
332 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); in restore_sigcontext()
333 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); in restore_sigcontext()
334 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); in restore_sigcontext()
337 regs->gpr[13] = save_r13; in restore_sigcontext()
355 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); in restore_sigcontext()
400 static long restore_tm_sigcontexts(struct pt_regs *regs, in restore_tm_sigcontexts() argument
413 err |= __copy_from_user(regs->gpr, tm_sc->gp_regs, sizeof(regs->gpr)); in restore_tm_sigcontexts()
415 sizeof(regs->gpr)); in restore_tm_sigcontexts()
425 err |= __get_user(regs->nip, &tm_sc->gp_regs[PT_NIP]); in restore_tm_sigcontexts()
435 regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK); in restore_tm_sigcontexts()
438 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); in restore_tm_sigcontexts()
441 err |= __get_user(regs->ctr, &tm_sc->gp_regs[PT_CTR]); in restore_tm_sigcontexts()
442 err |= __get_user(regs->link, &tm_sc->gp_regs[PT_LNK]); in restore_tm_sigcontexts()
443 err |= __get_user(regs->xer, &tm_sc->gp_regs[PT_XER]); in restore_tm_sigcontexts()
444 err |= __get_user(regs->ccr, &tm_sc->gp_regs[PT_CCR]); in restore_tm_sigcontexts()
455 err |= __get_user(regs->trap, &sc->gp_regs[PT_TRAP]); in restore_tm_sigcontexts()
456 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); in restore_tm_sigcontexts()
457 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); in restore_tm_sigcontexts()
458 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); in restore_tm_sigcontexts()
474 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); in restore_tm_sigcontexts()
541 regs->msr |= (MSR_FP | current->thread.fpexc_mode); in restore_tm_sigcontexts()
546 regs->msr |= MSR_VEC; in restore_tm_sigcontexts()
592 long ctx_size, long r6, long r7, long r8, struct pt_regs *regs) in sys_swapcontext() argument
621 || setup_sigcontext(&old_ctx->uc_mcontext, regs, 0, NULL, 0, in sys_swapcontext()
649 if (restore_sigcontext(regs, NULL, 0, &new_ctx->uc_mcontext)) in sys_swapcontext()
664 struct pt_regs *regs) in sys_rt_sigreturn() argument
666 struct ucontext __user *uc = (struct ucontext __user *)regs->gpr[1]; in sys_rt_sigreturn()
689 if (restore_tm_sigcontexts(regs, &uc->uc_mcontext, in sys_rt_sigreturn()
696 if (restore_sigcontext(regs, NULL, 1, &uc->uc_mcontext)) in sys_rt_sigreturn()
707 printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, in sys_rt_sigreturn()
709 (long)uc, regs->nip, regs->link); in sys_rt_sigreturn()
715 int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) in handle_rt_signal64() argument
721 frame = get_sigframe(ksig, get_tm_stackpointer(regs), sizeof(*frame), 0); in handle_rt_signal64()
733 err |= __save_altstack(&frame->uc.uc_stack, regs->gpr[1]); in handle_rt_signal64()
735 if (MSR_TM_ACTIVE(regs->msr)) { in handle_rt_signal64()
742 regs, ksig->sig, in handle_rt_signal64()
749 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, ksig->sig, in handle_rt_signal64()
762 regs->link = current->mm->context.vdso_base + vdso64_rt_sigtramp; in handle_rt_signal64()
767 regs->link = (unsigned long) &frame->tramp[0]; in handle_rt_signal64()
772 err |= put_user(regs->gpr[1], (unsigned long __user *)newsp); in handle_rt_signal64()
776 regs->nip = (unsigned long) ksig->ka.sa.sa_handler; in handle_rt_signal64()
777 regs->gpr[12] = regs->nip; in handle_rt_signal64()
787 err |= get_user(regs->nip, &funct_desc_ptr->entry); in handle_rt_signal64()
788 err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); in handle_rt_signal64()
792 regs->msr &= ~MSR_LE; in handle_rt_signal64()
793 regs->msr |= (MSR_KERNEL & MSR_LE); in handle_rt_signal64()
794 regs->gpr[1] = newsp; in handle_rt_signal64()
795 regs->gpr[3] = ksig->sig; in handle_rt_signal64()
796 regs->result = 0; in handle_rt_signal64()
798 err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo); in handle_rt_signal64()
799 err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc); in handle_rt_signal64()
800 regs->gpr[6] = (unsigned long) frame; in handle_rt_signal64()
802 regs->gpr[4] = (unsigned long)&frame->uc.uc_mcontext; in handle_rt_signal64()
811 printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, in handle_rt_signal64()
813 (long)frame, regs->nip, regs->link); in handle_rt_signal64()