Lines Matching refs:regs

91 int handle_kernel_fault(struct pt_regs *regs)  in handle_kernel_fault()  argument
97 fixup = search_exception_tables(regs->pc); in handle_kernel_fault()
102 regs->stkadj = frame_extra_sizes(regs->format); in handle_kernel_fault()
103 tregs = (struct pt_regs *)((long)regs + regs->stkadj); in handle_kernel_fault()
104 tregs->vector = regs->vector; in handle_kernel_fault()
107 tregs->sr = regs->sr; in handle_kernel_fault()
114 struct pt_regs *regs = signal_pt_regs(); in ptrace_signal_deliver() local
115 if (regs->orig_d0 < 0) in ptrace_signal_deliver()
117 switch (regs->d0) { in ptrace_signal_deliver()
121 regs->d0 = regs->orig_d0; in ptrace_signal_deliver()
122 regs->orig_d0 = -1; in ptrace_signal_deliver()
123 regs->pc -= 2; in ptrace_signal_deliver()
195 static inline void adjustformat(struct pt_regs *regs) in adjustformat() argument
199 static inline void save_a5_state(struct sigcontext *sc, struct pt_regs *regs) in save_a5_state() argument
214 static inline void adjustformat(struct pt_regs *regs) in adjustformat() argument
216 ((struct switch_stack *)regs - 1)->a5 = current->mm->start_data; in adjustformat()
221 regs->format = 0x4; in adjustformat()
224 static inline void save_a5_state(struct sigcontext *sc, struct pt_regs *regs) in save_a5_state() argument
226 sc->sc_a5 = ((struct switch_stack *)regs - 1)->a5; in save_a5_state()
447 static inline void save_fpu_state(struct sigcontext *sc, struct pt_regs *regs) in save_fpu_state() argument
469 regs->vector >= (VEC_FPBRUC * 4) && in save_fpu_state()
470 regs->vector <= (VEC_FPNAN * 4)) { in save_fpu_state()
500 static inline int rt_save_fpu_state(struct ucontext __user *uc, struct pt_regs *regs) in rt_save_fpu_state() argument
532 regs->vector >= (VEC_FPBRUC * 4) && in rt_save_fpu_state()
533 regs->vector <= (VEC_FPNAN * 4)) { in rt_save_fpu_state()
583 static inline void save_fpu_state(struct sigcontext *sc, struct pt_regs *regs) in save_fpu_state() argument
587 static inline int rt_save_fpu_state(struct ucontext __user *uc, struct pt_regs *regs) in rt_save_fpu_state() argument
594 static int mangle_kernel_stack(struct pt_regs *regs, int formatvec, in mangle_kernel_stack() argument
608 regs->format = formatvec >> 12; in mangle_kernel_stack()
609 regs->vector = formatvec & 0xfff; in mangle_kernel_stack()
611 struct switch_stack *sw = (struct switch_stack *)regs - 1; in mangle_kernel_stack()
619 regs->format = formatvec >> 12; in mangle_kernel_stack()
620 regs->vector = formatvec & 0xfff; in mangle_kernel_stack()
651 restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __user *fp) in restore_sigcontext() argument
665 regs->d0 = context.sc_d0; in restore_sigcontext()
666 regs->d1 = context.sc_d1; in restore_sigcontext()
667 regs->a0 = context.sc_a0; in restore_sigcontext()
668 regs->a1 = context.sc_a1; in restore_sigcontext()
669 regs->sr = (regs->sr & 0xff00) | (context.sc_sr & 0xff); in restore_sigcontext()
670 regs->pc = context.sc_pc; in restore_sigcontext()
671 regs->orig_d0 = -1; /* disable syscall checks */ in restore_sigcontext()
677 if (err || mangle_kernel_stack(regs, formatvec, fp)) in restore_sigcontext()
687 rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, in rt_restore_ucontext() argument
702 err |= __get_user(regs->d0, &gregs[0]); in rt_restore_ucontext()
703 err |= __get_user(regs->d1, &gregs[1]); in rt_restore_ucontext()
704 err |= __get_user(regs->d2, &gregs[2]); in rt_restore_ucontext()
705 err |= __get_user(regs->d3, &gregs[3]); in rt_restore_ucontext()
706 err |= __get_user(regs->d4, &gregs[4]); in rt_restore_ucontext()
707 err |= __get_user(regs->d5, &gregs[5]); in rt_restore_ucontext()
710 err |= __get_user(regs->a0, &gregs[8]); in rt_restore_ucontext()
711 err |= __get_user(regs->a1, &gregs[9]); in rt_restore_ucontext()
712 err |= __get_user(regs->a2, &gregs[10]); in rt_restore_ucontext()
719 err |= __get_user(regs->pc, &gregs[16]); in rt_restore_ucontext()
721 regs->sr = (regs->sr & 0xff00) | (temp & 0xff); in rt_restore_ucontext()
722 regs->orig_d0 = -1; /* disable syscall checks */ in rt_restore_ucontext()
731 if (mangle_kernel_stack(regs, temp, &uc->uc_extra)) in rt_restore_ucontext()
743 struct pt_regs *regs = (struct pt_regs *) (sw + 1); in do_sigreturn() local
758 if (restore_sigcontext(regs, &frame->sc, frame + 1)) in do_sigreturn()
760 return regs->d0; in do_sigreturn()
770 struct pt_regs *regs = (struct pt_regs *) (sw + 1); in do_rt_sigreturn() local
782 if (rt_restore_ucontext(regs, sw, &frame->uc)) in do_rt_sigreturn()
784 return regs->d0; in do_rt_sigreturn()
791 static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, in setup_sigcontext() argument
796 sc->sc_d0 = regs->d0; in setup_sigcontext()
797 sc->sc_d1 = regs->d1; in setup_sigcontext()
798 sc->sc_a0 = regs->a0; in setup_sigcontext()
799 sc->sc_a1 = regs->a1; in setup_sigcontext()
800 sc->sc_sr = regs->sr; in setup_sigcontext()
801 sc->sc_pc = regs->pc; in setup_sigcontext()
802 sc->sc_formatvec = regs->format << 12 | regs->vector; in setup_sigcontext()
803 save_a5_state(sc, regs); in setup_sigcontext()
804 save_fpu_state(sc, regs); in setup_sigcontext()
807 static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *regs) in rt_setup_ucontext() argument
809 struct switch_stack *sw = (struct switch_stack *)regs - 1; in rt_setup_ucontext()
814 err |= __put_user(regs->d0, &gregs[0]); in rt_setup_ucontext()
815 err |= __put_user(regs->d1, &gregs[1]); in rt_setup_ucontext()
816 err |= __put_user(regs->d2, &gregs[2]); in rt_setup_ucontext()
817 err |= __put_user(regs->d3, &gregs[3]); in rt_setup_ucontext()
818 err |= __put_user(regs->d4, &gregs[4]); in rt_setup_ucontext()
819 err |= __put_user(regs->d5, &gregs[5]); in rt_setup_ucontext()
822 err |= __put_user(regs->a0, &gregs[8]); in rt_setup_ucontext()
823 err |= __put_user(regs->a1, &gregs[9]); in rt_setup_ucontext()
824 err |= __put_user(regs->a2, &gregs[10]); in rt_setup_ucontext()
830 err |= __put_user(regs->pc, &gregs[16]); in rt_setup_ucontext()
831 err |= __put_user(regs->sr, &gregs[17]); in rt_setup_ucontext()
832 err |= __put_user((regs->format << 12) | regs->vector, &uc->uc_formatvec); in rt_setup_ucontext()
833 err |= rt_save_fpu_state(uc, regs); in rt_setup_ucontext()
846 struct pt_regs *regs) in setup_frame() argument
849 int fsize = frame_extra_sizes(regs->format); in setup_frame()
856 regs->format); in setup_frame()
864 err |= copy_to_user (frame + 1, regs + 1, fsize); in setup_frame()
868 err |= __put_user(regs->vector, &frame->code); in setup_frame()
875 setup_sigcontext(&context, regs, set->sig[0]); in setup_frame()
898 regs->pc = (unsigned long) ksig->ka.sa.sa_handler; in setup_frame()
899 adjustformat(regs); in setup_frame()
907 regs->stkadj = fsize; in setup_frame()
910 if (regs->stkadj) { in setup_frame()
912 (struct pt_regs *)((ulong)regs + regs->stkadj); in setup_frame()
914 printk("Performing stackadjust=%04x\n", regs->stkadj); in setup_frame()
920 tregs->pc = regs->pc; in setup_frame()
921 tregs->sr = regs->sr; in setup_frame()
927 struct pt_regs *regs) in setup_rt_frame() argument
930 int fsize = frame_extra_sizes(regs->format); in setup_rt_frame()
936 regs->format); in setup_rt_frame()
944 err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize); in setup_rt_frame()
955 err |= rt_setup_ucontext(&frame->uc, regs); in setup_rt_frame()
986 regs->pc = (unsigned long) ksig->ka.sa.sa_handler; in setup_rt_frame()
987 adjustformat(regs); in setup_rt_frame()
995 regs->stkadj = fsize; in setup_rt_frame()
998 if (regs->stkadj) { in setup_rt_frame()
1000 (struct pt_regs *)((ulong)regs + regs->stkadj); in setup_rt_frame()
1002 printk("Performing stackadjust=%04x\n", regs->stkadj); in setup_rt_frame()
1008 tregs->pc = regs->pc; in setup_rt_frame()
1009 tregs->sr = regs->sr; in setup_rt_frame()
1015 handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) in handle_restart() argument
1017 switch (regs->d0) { in handle_restart()
1021 regs->d0 = -EINTR; in handle_restart()
1026 regs->d0 = __NR_restart_syscall; in handle_restart()
1027 regs->pc -= 2; in handle_restart()
1030 regs->d0 = -EINTR; in handle_restart()
1035 regs->d0 = -EINTR; in handle_restart()
1041 regs->d0 = regs->orig_d0; in handle_restart()
1042 regs->pc -= 2; in handle_restart()
1051 handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument
1056 if (regs->orig_d0 >= 0) in handle_signal()
1058 handle_restart(regs, &ksig->ka, 1); in handle_signal()
1062 err = setup_rt_frame(ksig, oldset, regs); in handle_signal()
1064 err = setup_frame(ksig, oldset, regs); in handle_signal()
1069 regs->sr &= ~0x8000; in handle_signal()
1079 static void do_signal(struct pt_regs *regs) in do_signal() argument
1083 current->thread.esp0 = (unsigned long) regs; in do_signal()
1087 handle_signal(&ksig, regs); in do_signal()
1092 if (regs->orig_d0 >= 0) in do_signal()
1094 handle_restart(regs, NULL, 0); in do_signal()
1100 void do_notify_resume(struct pt_regs *regs) in do_notify_resume() argument
1103 do_signal(regs); in do_notify_resume()
1106 tracehook_notify_resume(regs); in do_notify_resume()