Lines Matching refs:regs
86 static inline void conditional_sti(struct pt_regs *regs) in conditional_sti() argument
88 if (regs->flags & X86_EFLAGS_IF) in conditional_sti()
92 static inline void preempt_conditional_sti(struct pt_regs *regs) in preempt_conditional_sti() argument
95 if (regs->flags & X86_EFLAGS_IF) in preempt_conditional_sti()
99 static inline void conditional_cli(struct pt_regs *regs) in conditional_cli() argument
101 if (regs->flags & X86_EFLAGS_IF) in conditional_cli()
105 static inline void preempt_conditional_cli(struct pt_regs *regs) in preempt_conditional_cli() argument
107 if (regs->flags & X86_EFLAGS_IF) in preempt_conditional_cli()
118 void ist_enter(struct pt_regs *regs) in ist_enter() argument
120 if (user_mode(regs)) { in ist_enter()
138 void ist_exit(struct pt_regs *regs) in ist_exit() argument
142 if (!user_mode(regs)) in ist_exit()
159 void ist_begin_non_atomic(struct pt_regs *regs) in ist_begin_non_atomic() argument
161 BUG_ON(!user_mode(regs)); in ist_begin_non_atomic()
186 struct pt_regs *regs, long error_code) in do_trap_no_signal() argument
188 if (v8086_mode(regs)) { in do_trap_no_signal()
194 if (!handle_vm86_trap((struct kernel_vm86_regs *) regs, in do_trap_no_signal()
201 if (!user_mode(regs)) { in do_trap_no_signal()
202 if (!fixup_exception(regs)) { in do_trap_no_signal()
205 die(str, regs, error_code); in do_trap_no_signal()
213 static siginfo_t *fill_trap_info(struct pt_regs *regs, int signr, int trapnr, in fill_trap_info() argument
225 siaddr = uprobe_get_trap_addr(regs); in fill_trap_info()
229 siaddr = uprobe_get_trap_addr(regs); in fill_trap_info()
245 do_trap(int trapnr, int signr, char *str, struct pt_regs *regs, in do_trap() argument
251 if (!do_trap_no_signal(tsk, trapnr, str, regs, error_code)) in do_trap()
270 regs->ip, regs->sp, error_code); in do_trap()
271 print_vma_addr(" in ", regs->ip); in do_trap()
280 static void do_error_trap(struct pt_regs *regs, long error_code, char *str, in do_error_trap() argument
287 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) != in do_error_trap()
289 conditional_sti(regs); in do_error_trap()
290 do_trap(trapnr, signr, str, regs, error_code, in do_error_trap()
291 fill_trap_info(regs, signr, trapnr, &info)); in do_error_trap()
296 dotraplinkage void do_##name(struct pt_regs *regs, long error_code) \
298 do_error_trap(regs, error_code, str, trapnr, signr); \
312 dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code) in do_double_fault() argument
328 if (((long)regs->sp >> PGDIR_SHIFT) == ESPFIX_PGD_ENTRY && in do_double_fault()
329 regs->cs == __KERNEL_CS && in do_double_fault()
330 regs->ip == (unsigned long)native_irq_return_iret) in do_double_fault()
335 memmove(&normal_regs->ip, (void *)regs->sp, 5*8); in do_double_fault()
337 regs->ip = (unsigned long)general_protection; in do_double_fault()
338 regs->sp = (unsigned long)&normal_regs->orig_ax; in do_double_fault()
344 ist_enter(regs); in do_double_fault()
345 notify_die(DIE_TRAP, str, regs, error_code, X86_TRAP_DF, SIGSEGV); in do_double_fault()
351 df_debug(regs, error_code); in do_double_fault()
358 die(str, regs, error_code); in do_double_fault()
362 dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) in do_bounds() argument
368 if (notify_die(DIE_TRAP, "bounds", regs, error_code, in do_bounds()
371 conditional_sti(regs); in do_bounds()
373 if (!user_mode(regs)) in do_bounds()
374 die("bounds", regs, error_code); in do_bounds()
403 info = mpx_generate_siginfo(regs); in do_bounds()
418 do_trap(X86_TRAP_BR, SIGSEGV, "bounds", regs, error_code, info); in do_bounds()
424 die("bounds", regs, error_code); in do_bounds()
437 do_trap(X86_TRAP_BR, SIGSEGV, "bounds", regs, error_code, NULL); in do_bounds()
441 do_general_protection(struct pt_regs *regs, long error_code) in do_general_protection() argument
446 conditional_sti(regs); in do_general_protection()
448 if (v8086_mode(regs)) { in do_general_protection()
450 handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code); in do_general_protection()
455 if (!user_mode(regs)) { in do_general_protection()
456 if (fixup_exception(regs)) in do_general_protection()
461 if (notify_die(DIE_GPF, "general protection fault", regs, error_code, in do_general_protection()
463 die("general protection fault", regs, error_code); in do_general_protection()
474 regs->ip, regs->sp, error_code); in do_general_protection()
475 print_vma_addr(" in ", regs->ip); in do_general_protection()
484 dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) in do_int3() argument
492 ftrace_int3_handler(regs)) in do_int3()
495 if (poke_int3_handler(regs)) in do_int3()
498 ist_enter(regs); in do_int3()
501 if (kgdb_ll_trap(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP, in do_int3()
507 if (kprobe_int3_handler(regs)) in do_int3()
511 if (notify_die(DIE_INT3, "int3", regs, error_code, X86_TRAP_BP, in do_int3()
520 preempt_conditional_sti(regs); in do_int3()
521 do_trap(X86_TRAP_BP, SIGTRAP, "int3", regs, error_code, NULL); in do_int3()
522 preempt_conditional_cli(regs); in do_int3()
525 ist_exit(regs); in do_int3()
537 struct pt_regs *regs = task_pt_regs(current); in sync_regs() local
538 *regs = *eregs; in sync_regs()
539 return regs; in sync_regs()
545 struct pt_regs regs; member
560 struct bad_iret_stack, regs); in fixup_bad_iret()
563 memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8); in fixup_bad_iret()
566 memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip)); in fixup_bad_iret()
568 BUG_ON(!user_mode(&new_stack->regs)); in fixup_bad_iret()
598 dotraplinkage void do_debug(struct pt_regs *regs, long error_code) in do_debug() argument
605 ist_enter(regs); in do_debug()
617 if (!dr6 && user_mode(regs)) in do_debug()
621 if ((dr6 & DR_STEP) && kmemcheck_trap(regs)) in do_debug()
636 if (kprobe_debug_handler(regs)) in do_debug()
640 if (notify_die(DIE_DEBUG, "debug", regs, (long)&dr6, error_code, in do_debug()
651 preempt_conditional_sti(regs); in do_debug()
653 if (v8086_mode(regs)) { in do_debug()
654 handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, in do_debug()
656 preempt_conditional_cli(regs); in do_debug()
668 if ((dr6 & DR_STEP) && !user_mode(regs)) { in do_debug()
671 regs->flags &= ~X86_EFLAGS_TF; in do_debug()
675 send_sigtrap(tsk, regs, error_code, si_code); in do_debug()
676 preempt_conditional_cli(regs); in do_debug()
680 ist_exit(regs); in do_debug()
689 static void math_error(struct pt_regs *regs, int error_code, int trapnr) in math_error() argument
697 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, SIGFPE) == NOTIFY_STOP) in math_error()
699 conditional_sti(regs); in math_error()
701 if (!user_mode(regs)) { in math_error()
702 if (!fixup_exception(regs)) { in math_error()
705 die(str, regs, error_code); in math_error()
719 info.si_addr = (void __user *)uprobe_get_trap_addr(regs); in math_error()
730 dotraplinkage void do_coprocessor_error(struct pt_regs *regs, long error_code) in do_coprocessor_error() argument
733 math_error(regs, error_code, X86_TRAP_MF); in do_coprocessor_error()
737 do_simd_coprocessor_error(struct pt_regs *regs, long error_code) in do_simd_coprocessor_error() argument
740 math_error(regs, error_code, X86_TRAP_XF); in do_simd_coprocessor_error()
744 do_spurious_interrupt_bug(struct pt_regs *regs, long error_code) in do_spurious_interrupt_bug() argument
746 conditional_sti(regs); in do_spurious_interrupt_bug()
750 do_device_not_available(struct pt_regs *regs, long error_code) in do_device_not_available() argument
759 conditional_sti(regs); in do_device_not_available()
761 info.regs = regs; in do_device_not_available()
768 conditional_sti(regs); in do_device_not_available()
774 dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) in do_iret_error() argument
785 if (notify_die(DIE_TRAP, "iret exception", regs, error_code, in do_iret_error()
787 do_trap(X86_TRAP_IRET, SIGILL, "iret exception", regs, error_code, in do_iret_error()