Lines Matching refs:regs
27 static inline void __user *get_trap_ip(struct pt_regs *regs) in get_trap_ip() argument
31 if (regs->int_code & 0x200) in get_trap_ip()
34 address = regs->psw.addr; in get_trap_ip()
36 ((address - (regs->int_code >> 16)) & PSW_ADDR_INSN); in get_trap_ip()
39 static inline void report_user_fault(struct pt_regs *regs, int signr) in report_user_fault() argument
48 regs->int_code & 0xffff, regs->int_code >> 17); in report_user_fault()
49 print_vma_addr("in ", regs->psw.addr & PSW_ADDR_INSN); in report_user_fault()
51 show_regs(regs); in report_user_fault()
59 void do_report_trap(struct pt_regs *regs, int si_signo, int si_code, char *str) in do_report_trap() argument
63 if (user_mode(regs)) { in do_report_trap()
67 info.si_addr = get_trap_ip(regs); in do_report_trap()
69 report_user_fault(regs, si_signo); in do_report_trap()
72 fixup = search_exception_tables(regs->psw.addr & PSW_ADDR_INSN); in do_report_trap()
74 regs->psw.addr = extable_fixup(fixup) | PSW_ADDR_AMODE; in do_report_trap()
78 btt = report_bug(regs->psw.addr & PSW_ADDR_INSN, regs); in do_report_trap()
81 die(regs, str); in do_report_trap()
86 static void do_trap(struct pt_regs *regs, int si_signo, int si_code, char *str) in do_trap() argument
88 if (notify_die(DIE_TRAP, str, regs, 0, in do_trap()
89 regs->int_code, si_signo) == NOTIFY_STOP) in do_trap()
91 do_report_trap(regs, si_signo, si_code, str); in do_trap()
95 void do_per_trap(struct pt_regs *regs) in do_per_trap() argument
99 if (notify_die(DIE_SSTEP, "sstep", regs, 0, 0, SIGTRAP) == NOTIFY_STOP) in do_per_trap()
112 void default_trap_handler(struct pt_regs *regs) in default_trap_handler() argument
114 if (user_mode(regs)) { in default_trap_handler()
115 report_user_fault(regs, SIGSEGV); in default_trap_handler()
118 die(regs, "Unknown program exception"); in default_trap_handler()
122 void name(struct pt_regs *regs) \
124 do_trap(regs, signr, sicode, str); \
154 static inline void do_fp_trap(struct pt_regs *regs, int fpc) in do_fp_trap() argument
171 do_trap(regs, SIGFPE, si_code, "floating point exception"); in do_fp_trap()
174 void translation_exception(struct pt_regs *regs) in translation_exception() argument
180 void illegal_op(struct pt_regs *regs) in illegal_op() argument
188 location = get_trap_ip(regs); in illegal_op()
190 if (user_mode(regs)) { in illegal_op()
214 if (is_uprobe_insn || !user_mode(regs)) { in illegal_op()
215 if (notify_die(DIE_BPT, "bpt", regs, 0, in illegal_op()
220 do_trap(regs, signal, ILL_ILLOPC, "illegal operation"); in illegal_op()
252 void vector_exception(struct pt_regs *regs) in vector_exception() argument
257 do_trap(regs, SIGILL, ILL_ILLOPN, "illegal operation"); in vector_exception()
283 do_trap(regs, SIGFPE, si_code, "vector exception"); in vector_exception()
293 void data_exception(struct pt_regs *regs) in data_exception() argument
298 location = get_trap_ip(regs); in data_exception()
306 regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16); in data_exception()
307 clear_pt_regs_flag(regs, PIF_PER_TRAP); in data_exception()
315 do_fp_trap(regs, current->thread.fp_regs.fpc); in data_exception()
317 do_trap(regs, signal, ILL_ILLOPN, "data exception"); in data_exception()
320 void space_switch_exception(struct pt_regs *regs) in space_switch_exception() argument
323 if (user_mode(regs)) in space_switch_exception()
324 regs->psw.mask |= PSW_ASC_HOME; in space_switch_exception()
326 do_trap(regs, SIGILL, ILL_PRVOPC, "space switch event"); in space_switch_exception()
329 void kernel_stack_overflow(struct pt_regs *regs) in kernel_stack_overflow() argument
333 show_regs(regs); in kernel_stack_overflow()