Lines Matching refs:regs

47 	get_user_ex(regs->x, &sc->x);			\
57 regs->seg = GET_SEG(seg); \
61 regs->seg = GET_SEG(seg) | 3; \
64 int restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc) in restore_sigcontext() argument
77 set_user_gs(regs, GET_SEG(gs)); in restore_sigcontext()
108 regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS); in restore_sigcontext()
109 regs->orig_ax = -1; /* disable syscall checks */ in restore_sigcontext()
123 struct pt_regs *regs, unsigned long mask) in setup_sigcontext() argument
130 put_user_ex(get_user_gs(regs), (unsigned int __user *)&sc->gs); in setup_sigcontext()
131 put_user_ex(regs->fs, (unsigned int __user *)&sc->fs); in setup_sigcontext()
132 put_user_ex(regs->es, (unsigned int __user *)&sc->es); in setup_sigcontext()
133 put_user_ex(regs->ds, (unsigned int __user *)&sc->ds); in setup_sigcontext()
136 put_user_ex(regs->di, &sc->di); in setup_sigcontext()
137 put_user_ex(regs->si, &sc->si); in setup_sigcontext()
138 put_user_ex(regs->bp, &sc->bp); in setup_sigcontext()
139 put_user_ex(regs->sp, &sc->sp); in setup_sigcontext()
140 put_user_ex(regs->bx, &sc->bx); in setup_sigcontext()
141 put_user_ex(regs->dx, &sc->dx); in setup_sigcontext()
142 put_user_ex(regs->cx, &sc->cx); in setup_sigcontext()
143 put_user_ex(regs->ax, &sc->ax); in setup_sigcontext()
145 put_user_ex(regs->r8, &sc->r8); in setup_sigcontext()
146 put_user_ex(regs->r9, &sc->r9); in setup_sigcontext()
147 put_user_ex(regs->r10, &sc->r10); in setup_sigcontext()
148 put_user_ex(regs->r11, &sc->r11); in setup_sigcontext()
149 put_user_ex(regs->r12, &sc->r12); in setup_sigcontext()
150 put_user_ex(regs->r13, &sc->r13); in setup_sigcontext()
151 put_user_ex(regs->r14, &sc->r14); in setup_sigcontext()
152 put_user_ex(regs->r15, &sc->r15); in setup_sigcontext()
157 put_user_ex(regs->ip, &sc->ip); in setup_sigcontext()
159 put_user_ex(regs->cs, (unsigned int __user *)&sc->cs); in setup_sigcontext()
160 put_user_ex(regs->flags, &sc->flags); in setup_sigcontext()
161 put_user_ex(regs->sp, &sc->sp_at_signal); in setup_sigcontext()
162 put_user_ex(regs->ss, (unsigned int __user *)&sc->ss); in setup_sigcontext()
164 put_user_ex(regs->flags, &sc->flags); in setup_sigcontext()
165 put_user_ex(regs->cs, &sc->cs); in setup_sigcontext()
202 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, in get_sigframe() argument
207 unsigned long sp = regs->sp; in get_sigframe()
222 (regs->ss & 0xffff) != __USER_DS && in get_sigframe()
278 struct pt_regs *regs) in __setup_frame() argument
285 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in __setup_frame()
293 if (setup_sigcontext(&frame->sc, fpstate, regs, set->sig[0])) in __setup_frame()
326 regs->sp = (unsigned long)frame; in __setup_frame()
327 regs->ip = (unsigned long)ksig->ka.sa.sa_handler; in __setup_frame()
328 regs->ax = (unsigned long)sig; in __setup_frame()
329 regs->dx = 0; in __setup_frame()
330 regs->cx = 0; in __setup_frame()
332 regs->ds = __USER_DS; in __setup_frame()
333 regs->es = __USER_DS; in __setup_frame()
334 regs->ss = __USER_DS; in __setup_frame()
335 regs->cs = __USER_CS; in __setup_frame()
341 sigset_t *set, struct pt_regs *regs) in __setup_rt_frame() argument
348 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in __setup_rt_frame()
364 save_altstack_ex(&frame->uc.uc_stack, regs->sp); in __setup_rt_frame()
385 regs, set->sig[0]); in __setup_rt_frame()
392 regs->sp = (unsigned long)frame; in __setup_rt_frame()
393 regs->ip = (unsigned long)ksig->ka.sa.sa_handler; in __setup_rt_frame()
394 regs->ax = (unsigned long)sig; in __setup_rt_frame()
395 regs->dx = (unsigned long)&frame->info; in __setup_rt_frame()
396 regs->cx = (unsigned long)&frame->uc; in __setup_rt_frame()
398 regs->ds = __USER_DS; in __setup_rt_frame()
399 regs->es = __USER_DS; in __setup_rt_frame()
400 regs->ss = __USER_DS; in __setup_rt_frame()
401 regs->cs = __USER_CS; in __setup_rt_frame()
407 sigset_t *set, struct pt_regs *regs) in __setup_rt_frame() argument
413 frame = get_sigframe(&ksig->ka, regs, sizeof(struct rt_sigframe), &fp); in __setup_rt_frame()
430 save_altstack_ex(&frame->uc.uc_stack, regs->sp); in __setup_rt_frame()
443 err |= setup_sigcontext(&frame->uc.uc_mcontext, fp, regs, set->sig[0]); in __setup_rt_frame()
450 regs->di = sig; in __setup_rt_frame()
452 regs->ax = 0; in __setup_rt_frame()
456 regs->si = (unsigned long)&frame->info; in __setup_rt_frame()
457 regs->dx = (unsigned long)&frame->uc; in __setup_rt_frame()
458 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in __setup_rt_frame()
460 regs->sp = (unsigned long)frame; in __setup_rt_frame()
464 regs->cs = __USER_CS; in __setup_rt_frame()
472 struct pt_regs *regs) in x32_setup_rt_frame() argument
480 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in x32_setup_rt_frame()
497 compat_save_altstack_ex(&frame->uc.uc_stack, regs->sp); in x32_setup_rt_frame()
511 regs, set->sig[0]); in x32_setup_rt_frame()
518 regs->sp = (unsigned long) frame; in x32_setup_rt_frame()
519 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in x32_setup_rt_frame()
522 regs->di = ksig->sig; in x32_setup_rt_frame()
523 regs->si = (unsigned long) &frame->info; in x32_setup_rt_frame()
524 regs->dx = (unsigned long) &frame->uc; in x32_setup_rt_frame()
529 regs->cs = __USER_CS; in x32_setup_rt_frame()
530 regs->ss = __USER_DS; in x32_setup_rt_frame()
542 struct pt_regs *regs = current_pt_regs(); in sys_sigreturn() local
546 frame = (struct sigframe __user *)(regs->sp - 8); in sys_sigreturn()
557 if (restore_sigcontext(regs, &frame->sc)) in sys_sigreturn()
559 return regs->ax; in sys_sigreturn()
562 signal_fault(regs, frame, "sigreturn"); in sys_sigreturn()
570 struct pt_regs *regs = current_pt_regs(); in sys_rt_sigreturn() local
574 frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long)); in sys_rt_sigreturn()
582 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) in sys_rt_sigreturn()
588 return regs->ax; in sys_rt_sigreturn()
591 signal_fault(regs, frame, "rt_sigreturn"); in sys_rt_sigreturn()
612 setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) in setup_rt_frame() argument
621 return ia32_setup_rt_frame(usig, ksig, cset, regs); in setup_rt_frame()
623 return ia32_setup_frame(usig, ksig, cset, regs); in setup_rt_frame()
625 return x32_setup_rt_frame(ksig, cset, regs); in setup_rt_frame()
627 return __setup_rt_frame(ksig->sig, ksig, set, regs); in setup_rt_frame()
632 handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument
637 if (v8086_mode(regs)) in handle_signal()
638 save_v86_state((struct kernel_vm86_regs *) regs, VM86_SIGNAL); in handle_signal()
641 if (syscall_get_nr(current, regs) >= 0) { in handle_signal()
643 switch (syscall_get_error(current, regs)) { in handle_signal()
646 regs->ax = -EINTR; in handle_signal()
651 regs->ax = -EINTR; in handle_signal()
656 regs->ax = regs->orig_ax; in handle_signal()
657 regs->ip -= 2; in handle_signal()
671 failed = (setup_rt_frame(ksig, regs) < 0); in handle_signal()
683 regs->flags &= ~(X86_EFLAGS_DF|X86_EFLAGS_RF|X86_EFLAGS_TF); in handle_signal()
693 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs) in get_nr_restart_syscall() argument
699 __NR_restart_syscall | (regs->orig_ax & __X32_SYSCALL_BIT); in get_nr_restart_syscall()
708 void do_signal(struct pt_regs *regs) in do_signal() argument
714 handle_signal(&ksig, regs); in do_signal()
719 if (syscall_get_nr(current, regs) >= 0) { in do_signal()
721 switch (syscall_get_error(current, regs)) { in do_signal()
725 regs->ax = regs->orig_ax; in do_signal()
726 regs->ip -= 2; in do_signal()
730 regs->ax = get_nr_restart_syscall(regs); in do_signal()
731 regs->ip -= 2; in do_signal()
743 void signal_fault(struct pt_regs *regs, void __user *frame, char *where) in signal_fault() argument
752 regs->ip, regs->sp, regs->orig_ax); in signal_fault()
753 print_vma_addr(" in ", regs->ip); in signal_fault()
763 struct pt_regs *regs = current_pt_regs(); in sys32_x32_rt_sigreturn() local
767 frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8); in sys32_x32_rt_sigreturn()
776 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) in sys32_x32_rt_sigreturn()
782 return regs->ax; in sys32_x32_rt_sigreturn()
785 signal_fault(regs, frame, "x32 rt_sigreturn"); in sys32_x32_rt_sigreturn()