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
76 set_user_gs(regs, GET_SEG(gs)); in restore_sigcontext()
107 regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS); in restore_sigcontext()
108 regs->orig_ax = -1; /* disable syscall checks */ in restore_sigcontext()
121 struct pt_regs *regs, unsigned long mask) in setup_sigcontext() argument
128 put_user_ex(get_user_gs(regs), (unsigned int __user *)&sc->gs); in setup_sigcontext()
129 put_user_ex(regs->fs, (unsigned int __user *)&sc->fs); in setup_sigcontext()
130 put_user_ex(regs->es, (unsigned int __user *)&sc->es); in setup_sigcontext()
131 put_user_ex(regs->ds, (unsigned int __user *)&sc->ds); in setup_sigcontext()
134 put_user_ex(regs->di, &sc->di); in setup_sigcontext()
135 put_user_ex(regs->si, &sc->si); in setup_sigcontext()
136 put_user_ex(regs->bp, &sc->bp); in setup_sigcontext()
137 put_user_ex(regs->sp, &sc->sp); in setup_sigcontext()
138 put_user_ex(regs->bx, &sc->bx); in setup_sigcontext()
139 put_user_ex(regs->dx, &sc->dx); in setup_sigcontext()
140 put_user_ex(regs->cx, &sc->cx); in setup_sigcontext()
141 put_user_ex(regs->ax, &sc->ax); in setup_sigcontext()
143 put_user_ex(regs->r8, &sc->r8); in setup_sigcontext()
144 put_user_ex(regs->r9, &sc->r9); in setup_sigcontext()
145 put_user_ex(regs->r10, &sc->r10); in setup_sigcontext()
146 put_user_ex(regs->r11, &sc->r11); in setup_sigcontext()
147 put_user_ex(regs->r12, &sc->r12); in setup_sigcontext()
148 put_user_ex(regs->r13, &sc->r13); in setup_sigcontext()
149 put_user_ex(regs->r14, &sc->r14); in setup_sigcontext()
150 put_user_ex(regs->r15, &sc->r15); in setup_sigcontext()
155 put_user_ex(regs->ip, &sc->ip); in setup_sigcontext()
157 put_user_ex(regs->cs, (unsigned int __user *)&sc->cs); in setup_sigcontext()
158 put_user_ex(regs->flags, &sc->flags); in setup_sigcontext()
159 put_user_ex(regs->sp, &sc->sp_at_signal); in setup_sigcontext()
160 put_user_ex(regs->ss, (unsigned int __user *)&sc->ss); in setup_sigcontext()
162 put_user_ex(regs->flags, &sc->flags); in setup_sigcontext()
163 put_user_ex(regs->cs, &sc->cs); in setup_sigcontext()
200 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, in get_sigframe() argument
205 unsigned long sp = regs->sp; in get_sigframe()
219 (regs->ss & 0xffff) != __USER_DS && in get_sigframe()
275 struct pt_regs *regs) in __setup_frame() argument
282 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in __setup_frame()
290 if (setup_sigcontext(&frame->sc, fpstate, regs, set->sig[0])) in __setup_frame()
323 regs->sp = (unsigned long)frame; in __setup_frame()
324 regs->ip = (unsigned long)ksig->ka.sa.sa_handler; in __setup_frame()
325 regs->ax = (unsigned long)sig; in __setup_frame()
326 regs->dx = 0; in __setup_frame()
327 regs->cx = 0; in __setup_frame()
329 regs->ds = __USER_DS; in __setup_frame()
330 regs->es = __USER_DS; in __setup_frame()
331 regs->ss = __USER_DS; in __setup_frame()
332 regs->cs = __USER_CS; in __setup_frame()
338 sigset_t *set, struct pt_regs *regs) in __setup_rt_frame() argument
345 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in __setup_rt_frame()
361 save_altstack_ex(&frame->uc.uc_stack, regs->sp); in __setup_rt_frame()
382 regs, set->sig[0]); in __setup_rt_frame()
389 regs->sp = (unsigned long)frame; in __setup_rt_frame()
390 regs->ip = (unsigned long)ksig->ka.sa.sa_handler; in __setup_rt_frame()
391 regs->ax = (unsigned long)sig; in __setup_rt_frame()
392 regs->dx = (unsigned long)&frame->info; in __setup_rt_frame()
393 regs->cx = (unsigned long)&frame->uc; in __setup_rt_frame()
395 regs->ds = __USER_DS; in __setup_rt_frame()
396 regs->es = __USER_DS; in __setup_rt_frame()
397 regs->ss = __USER_DS; in __setup_rt_frame()
398 regs->cs = __USER_CS; in __setup_rt_frame()
404 sigset_t *set, struct pt_regs *regs) in __setup_rt_frame() argument
410 frame = get_sigframe(&ksig->ka, regs, sizeof(struct rt_sigframe), &fp); in __setup_rt_frame()
427 save_altstack_ex(&frame->uc.uc_stack, regs->sp); in __setup_rt_frame()
440 err |= setup_sigcontext(&frame->uc.uc_mcontext, fp, regs, set->sig[0]); in __setup_rt_frame()
447 regs->di = sig; in __setup_rt_frame()
449 regs->ax = 0; in __setup_rt_frame()
453 regs->si = (unsigned long)&frame->info; in __setup_rt_frame()
454 regs->dx = (unsigned long)&frame->uc; in __setup_rt_frame()
455 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in __setup_rt_frame()
457 regs->sp = (unsigned long)frame; in __setup_rt_frame()
461 regs->cs = __USER_CS; in __setup_rt_frame()
469 struct pt_regs *regs) in x32_setup_rt_frame() argument
477 frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fpstate); in x32_setup_rt_frame()
494 compat_save_altstack_ex(&frame->uc.uc_stack, regs->sp); in x32_setup_rt_frame()
508 regs, set->sig[0]); in x32_setup_rt_frame()
515 regs->sp = (unsigned long) frame; in x32_setup_rt_frame()
516 regs->ip = (unsigned long) ksig->ka.sa.sa_handler; in x32_setup_rt_frame()
519 regs->di = ksig->sig; in x32_setup_rt_frame()
520 regs->si = (unsigned long) &frame->info; in x32_setup_rt_frame()
521 regs->dx = (unsigned long) &frame->uc; in x32_setup_rt_frame()
526 regs->cs = __USER_CS; in x32_setup_rt_frame()
527 regs->ss = __USER_DS; in x32_setup_rt_frame()
539 struct pt_regs *regs = current_pt_regs(); in sys_sigreturn() local
543 frame = (struct sigframe __user *)(regs->sp - 8); in sys_sigreturn()
554 if (restore_sigcontext(regs, &frame->sc)) in sys_sigreturn()
556 return regs->ax; in sys_sigreturn()
559 signal_fault(regs, frame, "sigreturn"); in sys_sigreturn()
567 struct pt_regs *regs = current_pt_regs(); in sys_rt_sigreturn() local
571 frame = (struct rt_sigframe __user *)(regs->sp - sizeof(long)); in sys_rt_sigreturn()
579 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) in sys_rt_sigreturn()
585 return regs->ax; in sys_rt_sigreturn()
588 signal_fault(regs, frame, "rt_sigreturn"); in sys_rt_sigreturn()
593 setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) in setup_rt_frame() argument
602 return ia32_setup_rt_frame(usig, ksig, cset, regs); in setup_rt_frame()
604 return ia32_setup_frame(usig, ksig, cset, regs); in setup_rt_frame()
606 return x32_setup_rt_frame(ksig, cset, regs); in setup_rt_frame()
608 return __setup_rt_frame(ksig->sig, ksig, set, regs); in setup_rt_frame()
613 handle_signal(struct ksignal *ksig, struct pt_regs *regs) in handle_signal() argument
618 if (syscall_get_nr(current, regs) >= 0) { in handle_signal()
620 switch (syscall_get_error(current, regs)) { in handle_signal()
623 regs->ax = -EINTR; in handle_signal()
628 regs->ax = -EINTR; in handle_signal()
633 regs->ax = regs->orig_ax; in handle_signal()
634 regs->ip -= 2; in handle_signal()
648 failed = (setup_rt_frame(ksig, regs) < 0); in handle_signal()
660 regs->flags &= ~(X86_EFLAGS_DF|X86_EFLAGS_RF|X86_EFLAGS_TF); in handle_signal()
670 static inline unsigned long get_nr_restart_syscall(const struct pt_regs *regs) in get_nr_restart_syscall() argument
676 __NR_restart_syscall | (regs->orig_ax & __X32_SYSCALL_BIT); in get_nr_restart_syscall()
685 static void do_signal(struct pt_regs *regs) in do_signal() argument
691 handle_signal(&ksig, regs); in do_signal()
696 if (syscall_get_nr(current, regs) >= 0) { in do_signal()
698 switch (syscall_get_error(current, regs)) { in do_signal()
702 regs->ax = regs->orig_ax; in do_signal()
703 regs->ip -= 2; in do_signal()
707 regs->ax = get_nr_restart_syscall(regs); in do_signal()
708 regs->ip -= 2; in do_signal()
725 do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) in do_notify_resume() argument
730 uprobe_notify_resume(regs); in do_notify_resume()
734 do_signal(regs); in do_notify_resume()
738 tracehook_notify_resume(regs); in do_notify_resume()
746 void signal_fault(struct pt_regs *regs, void __user *frame, char *where) in signal_fault() argument
755 regs->ip, regs->sp, regs->orig_ax); in signal_fault()
756 print_vma_addr(" in ", regs->ip); in signal_fault()
766 struct pt_regs *regs = current_pt_regs(); in sys32_x32_rt_sigreturn() local
770 frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8); in sys32_x32_rt_sigreturn()
779 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) in sys32_x32_rt_sigreturn()
785 return regs->ax; in sys32_x32_rt_sigreturn()
788 signal_fault(regs, frame, "x32 rt_sigreturn"); in sys32_x32_rt_sigreturn()