Lines Matching refs:regs
39 static inline __kprobes int notify_page_fault(struct pt_regs *regs) in notify_page_fault() argument
44 if (kprobes_built_in() && !user_mode(regs)) { in notify_page_fault()
46 if (kprobe_running() && kprobe_fault_handler(regs, 0)) in notify_page_fault()
55 struct pt_regs *regs) in unhandled_fault() argument
71 die_if_kernel("Oops", regs); in unhandled_fault()
74 static void __kprobes bad_kernel_pc(struct pt_regs *regs, unsigned long vaddr) in bad_kernel_pc() argument
77 regs->tpc); in bad_kernel_pc()
78 printk(KERN_CRIT "OOPS: RPC [%016lx]\n", regs->u_regs[15]); in bad_kernel_pc()
79 printk("OOPS: RPC <%pS>\n", (void *) regs->u_regs[15]); in bad_kernel_pc()
82 unhandled_fault(regs->tpc, current, regs); in bad_kernel_pc()
149 show_signal_msg(struct pt_regs *regs, int sig, int code, in show_signal_msg() argument
161 (void *)regs->tpc, (void *)regs->u_regs[UREG_I7], in show_signal_msg()
162 (void *)regs->u_regs[UREG_FP], code); in show_signal_msg()
164 print_vma_addr(KERN_CONT " in ", regs->tpc); in show_signal_msg()
169 static void do_fault_siginfo(int code, int sig, struct pt_regs *regs, in do_fault_siginfo() argument
180 addr = regs->tpc; in do_fault_siginfo()
187 addr = compute_effective_address(regs, insn, 0); in do_fault_siginfo()
195 show_signal_msg(regs, sig, code, addr, current); in do_fault_siginfo()
200 static unsigned int get_fault_insn(struct pt_regs *regs, unsigned int insn) in get_fault_insn() argument
203 if (!regs->tpc || (regs->tpc & 0x3)) in get_fault_insn()
205 if (regs->tstate & TSTATE_PRIV) { in get_fault_insn()
206 insn = *(unsigned int *) regs->tpc; in get_fault_insn()
208 insn = get_user_insn(regs->tpc); in get_fault_insn()
214 static void __kprobes do_kernel_fault(struct pt_regs *regs, int si_code, in do_kernel_fault() argument
220 if ((!insn) && (regs->tstate & TSTATE_PRIV)) in do_kernel_fault()
231 asi = (regs->tstate >> 24); in do_kernel_fault()
236 handle_ldf_stq(insn, regs); in do_kernel_fault()
242 handle_ld_nf(insn, regs); in do_kernel_fault()
249 if (regs->tstate & TSTATE_PRIV) { in do_kernel_fault()
252 entry = search_exception_tables(regs->tpc); in do_kernel_fault()
254 regs->tpc = entry->fixup; in do_kernel_fault()
255 regs->tnpc = regs->tpc + 4; in do_kernel_fault()
262 do_fault_siginfo(si_code, SIGSEGV, regs, address, insn, fault_code); in do_kernel_fault()
267 unhandled_fault (address, current, regs); in do_kernel_fault()
270 static void noinline __kprobes bogus_32bit_fault_tpc(struct pt_regs *regs) in bogus_32bit_fault_tpc() argument
278 regs->tpc); in bogus_32bit_fault_tpc()
279 show_regs(regs); in bogus_32bit_fault_tpc()
282 asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) in do_sparc64_fault() argument
294 if (notify_page_fault(regs)) in do_sparc64_fault()
305 if (!(regs->tstate & TSTATE_PRIV)) { in do_sparc64_fault()
306 if (unlikely((regs->tpc >> 32) != 0)) { in do_sparc64_fault()
307 bogus_32bit_fault_tpc(regs); in do_sparc64_fault()
315 if (regs->tstate & TSTATE_PRIV) { in do_sparc64_fault()
316 unsigned long tpc = regs->tpc; in do_sparc64_fault()
323 bad_kernel_pc(regs, address); in do_sparc64_fault()
336 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); in do_sparc64_fault()
339 if ((regs->tstate & TSTATE_PRIV) && in do_sparc64_fault()
340 !search_exception_tables(regs->tpc)) { in do_sparc64_fault()
341 insn = get_fault_insn(regs, insn); in do_sparc64_fault()
367 insn = get_fault_insn(regs, 0); in do_sparc64_fault()
391 insn = get_fault_insn(regs, insn); in do_sparc64_fault()
396 asi = (regs->tstate >> 24); in do_sparc64_fault()
416 BUG_ON(address != regs->tpc); in do_sparc64_fault()
417 BUG_ON(regs->tstate & TSTATE_PRIV); in do_sparc64_fault()
460 1, regs, address); in do_sparc64_fault()
464 1, regs, address); in do_sparc64_fault()
494 hugetlb_setup(regs); in do_sparc64_fault()
507 insn = get_fault_insn(regs, insn); in do_sparc64_fault()
511 do_kernel_fault(regs, si_code, fault_code, insn, address); in do_sparc64_fault()
519 insn = get_fault_insn(regs, insn); in do_sparc64_fault()
521 if (!(regs->tstate & TSTATE_PRIV)) { in do_sparc64_fault()
528 insn = get_fault_insn(regs, 0); in do_sparc64_fault()
532 insn = get_fault_insn(regs, insn); in do_sparc64_fault()
539 do_fault_siginfo(BUS_ADRERR, SIGBUS, regs, address, insn, fault_code); in do_sparc64_fault()
542 if (regs->tstate & TSTATE_PRIV) in do_sparc64_fault()