Lines Matching refs:regs
52 * If regs->ss will cause an IRET fault, change it. Otherwise leave it
54 * user_64bit_mode(regs) would return true.
56 static void force_valid_ss(struct pt_regs *regs)
64 : [old_ss] "rm" ((u16)regs->ss));
75 regs->ss = __USER_DS;
82 static int restore_sigcontext(struct pt_regs *regs,
95 set_user_gs(regs, sc.gs);
96 regs->fs = sc.fs;
97 regs->es = sc.es;
98 regs->ds = sc.ds;
101 regs->bx = sc.bx;
102 regs->cx = sc.cx;
103 regs->dx = sc.dx;
104 regs->si = sc.si;
105 regs->di = sc.di;
106 regs->bp = sc.bp;
107 regs->ax = sc.ax;
108 regs->sp = sc.sp;
109 regs->ip = sc.ip;
112 regs->r8 = sc.r8;
113 regs->r9 = sc.r9;
114 regs->r10 = sc.r10;
115 regs->r11 = sc.r11;
116 regs->r12 = sc.r12;
117 regs->r13 = sc.r13;
118 regs->r14 = sc.r14;
119 regs->r15 = sc.r15;
123 regs->cs = sc.cs | 0x03;
124 regs->ss = sc.ss | 0x03;
126 regs->flags = (regs->flags & ~FIX_EFLAGS) | (sc.flags & FIX_EFLAGS);
128 regs->orig_ax = -1;
135 if (unlikely(!(uc_flags & UC_STRICT_RESTORE_SS) && user_64bit_mode(regs)))
136 force_valid_ss(regs);
145 struct pt_regs *regs, unsigned long mask)
148 unsafe_put_user(get_user_gs(regs),
150 unsafe_put_user(regs->fs, (unsigned int __user *)&sc->fs, Efault);
151 unsafe_put_user(regs->es, (unsigned int __user *)&sc->es, Efault);
152 unsafe_put_user(regs->ds, (unsigned int __user *)&sc->ds, Efault);
155 unsafe_put_user(regs->di, &sc->di, Efault);
156 unsafe_put_user(regs->si, &sc->si, Efault);
157 unsafe_put_user(regs->bp, &sc->bp, Efault);
158 unsafe_put_user(regs->sp, &sc->sp, Efault);
159 unsafe_put_user(regs->bx, &sc->bx, Efault);
160 unsafe_put_user(regs->dx, &sc->dx, Efault);
161 unsafe_put_user(regs->cx, &sc->cx, Efault);
162 unsafe_put_user(regs->ax, &sc->ax, Efault);
164 unsafe_put_user(regs->r8, &sc->r8, Efault);
165 unsafe_put_user(regs->r9, &sc->r9, Efault);
166 unsafe_put_user(regs->r10, &sc->r10, Efault);
167 unsafe_put_user(regs->r11, &sc->r11, Efault);
168 unsafe_put_user(regs->r12, &sc->r12, Efault);
169 unsafe_put_user(regs->r13, &sc->r13, Efault);
170 unsafe_put_user(regs->r14, &sc->r14, Efault);
171 unsafe_put_user(regs->r15, &sc->r15, Efault);
176 unsafe_put_user(regs->ip, &sc->ip, Efault);
178 unsafe_put_user(regs->cs, (unsigned int __user *)&sc->cs, Efault);
179 unsafe_put_user(regs->flags, &sc->flags, Efault);
180 unsafe_put_user(regs->sp, &sc->sp_at_signal, Efault);
181 unsafe_put_user(regs->ss, (unsigned int __user *)&sc->ss, Efault);
183 unsafe_put_user(regs->flags, &sc->flags, Efault);
184 unsafe_put_user(regs->cs, &sc->cs, Efault);
187 unsafe_put_user(regs->ss, &sc->ss, Efault);
200 #define unsafe_put_sigcontext(sc, fp, regs, set, label) \
202 if (__unsafe_setup_sigcontext(sc, fp, regs, set->sig[0])) \
233 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
237 bool nested_altstack = on_sig_stack(regs->sp);
240 unsigned long sp = regs->sp;
261 regs->ss != __USER_DS &&
322 struct pt_regs *regs)
328 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
334 unsafe_put_sigcontext(&frame->sc, fp, regs, set, Efault);
358 regs->sp = (unsigned long)frame;
359 regs->ip = (unsigned long)ksig->ka.sa.sa_handler;
360 regs->ax = (unsigned long)sig;
361 regs->dx = 0;
362 regs->cx = 0;
364 regs->ds = __USER_DS;
365 regs->es = __USER_DS;
366 regs->ss = __USER_DS;
367 regs->cs = __USER_CS;
377 sigset_t *set, struct pt_regs *regs)
383 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
398 unsafe_save_altstack(&frame->uc.uc_stack, regs->sp, Efault);
415 unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
423 regs->sp = (unsigned long)frame;
424 regs->ip = (unsigned long)ksig->ka.sa.sa_handler;
425 regs->ax = (unsigned long)sig;
426 regs->dx = (unsigned long)&frame->info;
427 regs->cx = (unsigned long)&frame->uc;
429 regs->ds = __USER_DS;
430 regs->es = __USER_DS;
431 regs->ss = __USER_DS;
432 regs->cs = __USER_CS;
440 static unsigned long frame_uc_flags(struct pt_regs *regs)
449 if (likely(user_64bit_mode(regs)))
456 sigset_t *set, struct pt_regs *regs)
466 frame = get_sigframe(&ksig->ka, regs, sizeof(struct rt_sigframe), &fp);
467 uc_flags = frame_uc_flags(regs);
475 unsafe_save_altstack(&frame->uc.uc_stack, regs->sp, Efault);
480 unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
490 regs->di = sig;
492 regs->ax = 0;
496 regs->si = (unsigned long)&frame->info;
497 regs->dx = (unsigned long)&frame->uc;
498 regs->ip = (unsigned long) ksig->ka.sa.sa_handler;
500 regs->sp = (unsigned long)frame;
519 regs->cs = __USER_CS;
521 if (unlikely(regs->ss != __USER_DS))
522 force_valid_ss(regs);
559 struct pt_regs *regs)
570 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
572 uc_flags = frame_uc_flags(regs);
580 unsafe_compat_save_altstack(&frame->uc.uc_stack, regs->sp, Efault);
584 unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
594 regs->sp = (unsigned long) frame;
595 regs->ip = (unsigned long) ksig->ka.sa.sa_handler;
598 regs->di = ksig->sig;
599 regs->si = (unsigned long) &frame->info;
600 regs->dx = (unsigned long) &frame->uc;
605 regs->cs = __USER_CS;
606 regs->ss = __USER_DS;
623 struct pt_regs *regs = current_pt_regs();
627 frame = (struct sigframe __user *)(regs->sp - 8);
641 if (restore_sigcontext(regs, &frame->sc, 0))
643 return regs->ax;
646 signal_fault(regs, frame, "sigreturn");
654 struct pt_regs *regs = current_pt_regs();
659 frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long));
669 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
675 return regs->ax;
678 signal_fault(regs, frame, "rt_sigreturn");
700 setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs)
707 rseq_signal_deliver(ksig, regs);
712 return ia32_setup_rt_frame(usig, ksig, cset, regs);
714 return ia32_setup_frame(usig, ksig, cset, regs);
716 return x32_setup_rt_frame(ksig, cset, regs);
718 return __setup_rt_frame(ksig->sig, ksig, set, regs);
723 handle_signal(struct ksignal *ksig, struct pt_regs *regs)
728 if (v8086_mode(regs))
729 save_v86_state((struct kernel_vm86_regs *) regs, VM86_SIGNAL);
732 if (syscall_get_nr(current, regs) >= 0) {
734 switch (syscall_get_error(current, regs)) {
737 regs->ax = -EINTR;
742 regs->ax = -EINTR;
747 regs->ax = regs->orig_ax;
748 regs->ip -= 2;
762 failed = (setup_rt_frame(ksig, regs) < 0);
774 regs->flags &= ~(X86_EFLAGS_DF|X86_EFLAGS_RF|X86_EFLAGS_TF);
783 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs)
790 return __NR_restart_syscall | (regs->orig_ax & __X32_SYSCALL_BIT);
801 void arch_do_signal_or_restart(struct pt_regs *regs, bool has_signal)
807 handle_signal(&ksig, regs);
812 if (syscall_get_nr(current, regs) >= 0) {
814 switch (syscall_get_error(current, regs)) {
818 regs->ax = regs->orig_ax;
819 regs->ip -= 2;
823 regs->ax = get_nr_restart_syscall(regs);
824 regs->ip -= 2;
836 void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
845 regs->ip, regs->sp, regs->orig_ax);
846 print_vma_addr(KERN_CONT " in ", regs->ip);
856 struct pt_regs *regs = current_pt_regs();
861 frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8);
872 if (restore_sigcontext(regs, &frame->uc.uc_mcontext, uc_flags))
878 return regs->ax;
881 signal_fault(regs, frame, "x32 rt_sigreturn");