Lines Matching refs:regs

99 int (*board_be_handler)(struct pt_regs *regs, int is_fixup);
138 static void show_backtrace(struct task_struct *task, const struct pt_regs *regs) in show_backtrace() argument
140 unsigned long sp = regs->regs[29]; in show_backtrace()
141 unsigned long ra = regs->regs[31]; in show_backtrace()
142 unsigned long pc = regs->cp0_epc; in show_backtrace()
147 if (raw_show_trace || user_mode(regs) || !__kernel_text_address(pc)) { in show_backtrace()
164 const struct pt_regs *regs) in show_stacktrace() argument
169 unsigned long __user *sp = (unsigned long __user *)regs->regs[29]; in show_stacktrace()
190 show_backtrace(task, regs); in show_stacktrace()
195 struct pt_regs regs; in show_stack() local
198 regs.regs[29] = (unsigned long)sp; in show_stack()
199 regs.regs[31] = 0; in show_stack()
200 regs.cp0_epc = 0; in show_stack()
203 regs.regs[29] = task->thread.reg29; in show_stack()
204 regs.regs[31] = 0; in show_stack()
205 regs.cp0_epc = task->thread.reg31; in show_stack()
209 memcpy(&regs, kdb_current_regs, sizeof(regs)); in show_stack()
212 prepare_frametrace(&regs); in show_stack()
220 show_stacktrace(task, &regs); in show_stack()
243 static void __show_regs(const struct pt_regs *regs) in __show_regs() argument
246 unsigned int cause = regs->cp0_cause; in __show_regs()
263 printk(" %0*lx", field, regs->regs[i]); in __show_regs()
271 printk("Acx : %0*lx\n", field, regs->acx); in __show_regs()
273 printk("Hi : %0*lx\n", field, regs->hi); in __show_regs()
274 printk("Lo : %0*lx\n", field, regs->lo); in __show_regs()
279 printk("epc : %0*lx %pS\n", field, regs->cp0_epc, in __show_regs()
280 (void *) regs->cp0_epc); in __show_regs()
281 printk("ra : %0*lx %pS\n", field, regs->regs[31], in __show_regs()
282 (void *) regs->regs[31]); in __show_regs()
284 printk("Status: %08x ", (uint32_t) regs->cp0_status); in __show_regs()
287 if (regs->cp0_status & ST0_KUO) in __show_regs()
289 if (regs->cp0_status & ST0_IEO) in __show_regs()
291 if (regs->cp0_status & ST0_KUP) in __show_regs()
293 if (regs->cp0_status & ST0_IEP) in __show_regs()
295 if (regs->cp0_status & ST0_KUC) in __show_regs()
297 if (regs->cp0_status & ST0_IEC) in __show_regs()
300 if (regs->cp0_status & ST0_KX) in __show_regs()
302 if (regs->cp0_status & ST0_SX) in __show_regs()
304 if (regs->cp0_status & ST0_UX) in __show_regs()
306 switch (regs->cp0_status & ST0_KSU) { in __show_regs()
320 if (regs->cp0_status & ST0_ERL) in __show_regs()
322 if (regs->cp0_status & ST0_EXL) in __show_regs()
324 if (regs->cp0_status & ST0_IE) in __show_regs()
333 printk("BadVA : %0*lx\n", field, regs->cp0_badvaddr); in __show_regs()
342 void show_regs(struct pt_regs *regs) in show_regs() argument
344 __show_regs((struct pt_regs *)regs); in show_regs()
347 void show_registers(struct pt_regs *regs) in show_registers() argument
352 __show_regs(regs); in show_registers()
365 if (!user_mode(regs)) in show_registers()
368 show_stacktrace(current, regs); in show_registers()
369 show_code((unsigned int __user *) regs->cp0_epc); in show_registers()
376 void __noreturn die(const char *str, struct pt_regs *regs) in die() argument
383 if (notify_die(DIE_OOPS, str, regs, 0, current->thread.trap_nr, in die()
392 show_registers(regs); in die()
407 if (regs && kexec_should_crash(current)) in die()
408 crash_kexec(regs); in die()
431 asmlinkage void do_be(struct pt_regs *regs) in do_be() argument
435 int data = regs->cp0_cause & 4; in do_be()
441 if (data && !user_mode(regs)) in do_be()
442 fixup = search_dbe_tables(exception_epc(regs)); in do_be()
448 action = board_be_handler(regs, fixup != NULL); in do_be()
455 regs->cp0_epc = fixup->nextinsn; in do_be()
468 field, regs->cp0_epc, field, regs->regs[31]); in do_be()
469 if (notify_die(DIE_OOPS, "bus error", regs, 0, current->thread.trap_nr, in do_be()
473 die_if_kernel("Oops", regs); in do_be()
510 static inline int simulate_ll(struct pt_regs *regs, unsigned int opcode) in simulate_ll() argument
526 ((unsigned long)(regs->regs[(opcode & BASE) >> 21]) + offset); in simulate_ll()
544 regs->regs[(opcode & RT) >> 16] = value; in simulate_ll()
549 static inline int simulate_sc(struct pt_regs *regs, unsigned int opcode) in simulate_sc() argument
566 ((unsigned long)(regs->regs[(opcode & BASE) >> 21]) + offset); in simulate_sc()
575 regs->regs[reg] = 0; in simulate_sc()
582 if (put_user(regs->regs[reg], vaddr)) in simulate_sc()
585 regs->regs[reg] = 1; in simulate_sc()
597 static int simulate_llsc(struct pt_regs *regs, unsigned int opcode) in simulate_llsc() argument
601 1, regs, 0); in simulate_llsc()
602 return simulate_ll(regs, opcode); in simulate_llsc()
606 1, regs, 0); in simulate_llsc()
607 return simulate_sc(regs, opcode); in simulate_llsc()
617 static int simulate_rdhwr(struct pt_regs *regs, int rd, int rt) in simulate_rdhwr() argument
622 1, regs, 0); in simulate_rdhwr()
625 regs->regs[rt] = smp_processor_id(); in simulate_rdhwr()
628 regs->regs[rt] = min(current_cpu_data.dcache.linesz, in simulate_rdhwr()
632 regs->regs[rt] = read_c0_count(); in simulate_rdhwr()
638 regs->regs[rt] = 1; in simulate_rdhwr()
641 regs->regs[rt] = 2; in simulate_rdhwr()
645 regs->regs[rt] = ti->tp_value; in simulate_rdhwr()
652 static int simulate_rdhwr_normal(struct pt_regs *regs, unsigned int opcode) in simulate_rdhwr_normal() argument
658 simulate_rdhwr(regs, rd, rt); in simulate_rdhwr_normal()
666 static int simulate_rdhwr_mm(struct pt_regs *regs, unsigned short opcode) in simulate_rdhwr_mm() argument
671 simulate_rdhwr(regs, rd, rt); in simulate_rdhwr_mm()
679 static int simulate_sync(struct pt_regs *regs, unsigned int opcode) in simulate_sync() argument
683 1, regs, 0); in simulate_sync()
690 asmlinkage void do_ov(struct pt_regs *regs) in do_ov() argument
696 .si_addr = (void __user *)regs->cp0_epc, in do_ov()
700 die_if_kernel("Integer overflow", regs); in do_ov()
763 static int simulate_fp(struct pt_regs *regs, unsigned int opcode, in simulate_fp() argument
789 regs->cp0_epc = old_epc; in simulate_fp()
790 regs->regs[31] = old_ra; in simulate_fp()
796 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1, in simulate_fp()
818 asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) in do_fpe() argument
825 if (notify_die(DIE_FP, "FP exception", regs, 0, current->thread.trap_nr, in do_fpe()
833 die_if_kernel("FP exception in kernel code", regs); in do_fpe()
850 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1, in do_fpe()
864 fault_addr = (void __user *) regs->cp0_epc; in do_fpe()
874 void do_trap_or_bp(struct pt_regs *regs, unsigned int code, in do_trap_or_bp() argument
881 if (kgdb_ll_trap(DIE_TRAP, str, regs, code, current->thread.trap_nr, in do_trap_or_bp()
886 if (notify_die(DIE_TRAP, str, regs, code, current->thread.trap_nr, in do_trap_or_bp()
900 die_if_kernel(b, regs); in do_trap_or_bp()
906 info.si_addr = (void __user *) regs->cp0_epc; in do_trap_or_bp()
910 die_if_kernel("Kernel bug detected", regs); in do_trap_or_bp()
922 if (do_dsemulret(regs)) in do_trap_or_bp()
925 die_if_kernel("Math emu break/trap", regs); in do_trap_or_bp()
930 die_if_kernel(b, regs); in do_trap_or_bp()
935 asmlinkage void do_bp(struct pt_regs *regs) in do_bp() argument
937 unsigned long epc = msk_isa16_mode(exception_epc(regs)); in do_bp()
943 if (!user_mode(regs)) in do_bp()
947 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; in do_bp()
948 if (get_isa16_mode(regs->cp0_epc)) { in do_bp()
988 if (notify_die(DIE_UPROBE, "uprobe", regs, bcode, in do_bp()
994 if (notify_die(DIE_UPROBE_XOL, "uprobe_xol", regs, bcode, in do_bp()
1000 if (notify_die(DIE_BREAK, "debug", regs, bcode, in do_bp()
1006 if (notify_die(DIE_SSTEPBP, "single_step", regs, bcode, in do_bp()
1015 do_trap_or_bp(regs, bcode, "Break"); in do_bp()
1027 asmlinkage void do_tr(struct pt_regs *regs) in do_tr() argument
1033 unsigned long epc = msk_isa16_mode(exception_epc(regs)); in do_tr()
1036 if (!user_mode(regs)) in do_tr()
1040 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; in do_tr()
1041 if (get_isa16_mode(regs->cp0_epc)) { in do_tr()
1057 do_trap_or_bp(regs, tcode, "Trap"); in do_tr()
1069 asmlinkage void do_ri(struct pt_regs *regs) in do_ri() argument
1071 unsigned int __user *epc = (unsigned int __user *)exception_epc(regs); in do_ri()
1072 unsigned long old_epc = regs->cp0_epc; in do_ri()
1073 unsigned long old31 = regs->regs[31]; in do_ri()
1083 likely(user_mode(regs)) && in do_ri()
1087 status = mipsr2_decoder(regs, opcode, &fcr31); in do_ri()
1107 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; in do_ri()
1109 if (notify_die(DIE_RI, "RI Fault", regs, 0, current->thread.trap_nr, in do_ri()
1113 die_if_kernel("Reserved instruction in kernel code", regs); in do_ri()
1115 if (unlikely(compute_return_epc(regs) < 0)) in do_ri()
1118 if (get_isa16_mode(regs->cp0_epc)) { in do_ri()
1128 status = simulate_rdhwr_mm(regs, opcode); in do_ri()
1134 status = simulate_llsc(regs, opcode); in do_ri()
1137 status = simulate_rdhwr_normal(regs, opcode); in do_ri()
1140 status = simulate_sync(regs, opcode); in do_ri()
1143 status = simulate_fp(regs, opcode, old_epc, old31); in do_ri()
1150 regs->cp0_epc = old_epc; /* Undo skip-over. */ in do_ri()
1151 regs->regs[31] = old31; in do_ri()
1206 struct pt_regs *regs = data; in default_cu2_call() local
1209 "instruction", regs); in default_cu2_call()
1341 asmlinkage void do_cpu(struct pt_regs *regs) in do_cpu() argument
1355 cpid = (regs->cp0_cause >> CAUSEB_CE) & 3; in do_cpu()
1358 die_if_kernel("do_cpu invoked from kernel context!", regs); in do_cpu()
1362 epc = (unsigned int __user *)exception_epc(regs); in do_cpu()
1363 old_epc = regs->cp0_epc; in do_cpu()
1364 old31 = regs->regs[31]; in do_cpu()
1368 if (unlikely(compute_return_epc(regs) < 0)) in do_cpu()
1371 if (get_isa16_mode(regs->cp0_epc)) { in do_cpu()
1381 status = simulate_rdhwr_mm(regs, opcode); in do_cpu()
1387 status = simulate_llsc(regs, opcode); in do_cpu()
1390 status = simulate_rdhwr_normal(regs, opcode); in do_cpu()
1397 regs->cp0_epc = old_epc; /* Undo skip-over. */ in do_cpu()
1398 regs->regs[31] = old31; in do_cpu()
1429 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 0, in do_cpu()
1446 raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs); in do_cpu()
1453 asmlinkage void do_msa_fpe(struct pt_regs *regs, unsigned int msacsr) in do_msa_fpe() argument
1458 current->thread.trap_nr = (regs->cp0_cause >> 2) & 0x1f; in do_msa_fpe()
1459 if (notify_die(DIE_MSAFP, "MSA FP exception", regs, 0, in do_msa_fpe()
1467 die_if_kernel("do_msa_fpe invoked from kernel context!", regs); in do_msa_fpe()
1473 asmlinkage void do_msa(struct pt_regs *regs) in do_msa() argument
1485 die_if_kernel("do_msa invoked from kernel context!", regs); in do_msa()
1494 asmlinkage void do_mdmx(struct pt_regs *regs) in do_mdmx() argument
1506 asmlinkage void do_watch(struct pt_regs *regs) in do_watch() argument
1536 asmlinkage void do_mcheck(struct pt_regs *regs) in do_mcheck() argument
1538 int multi_match = regs->cp0_status & ST0_TS; in do_mcheck()
1543 show_regs(regs); in do_mcheck()
1551 if (!user_mode(regs)) in do_mcheck()
1554 show_code((unsigned int __user *) regs->cp0_epc); in do_mcheck()
1567 asmlinkage void do_mt(struct pt_regs *regs) in do_mt() argument
1597 die_if_kernel("MIPS MT Thread exception in kernel", regs); in do_mt()
1603 asmlinkage void do_dsp(struct pt_regs *regs) in do_dsp() argument
1611 asmlinkage void do_reserved(struct pt_regs *regs) in do_reserved() argument
1618 show_regs(regs); in do_reserved()
1620 (regs->cp0_cause & 0x7f) >> 2); in do_reserved()
1810 void ejtag_exception_handler(struct pt_regs *regs) in ejtag_exception_handler() argument
1827 old_epc = regs->cp0_epc; in ejtag_exception_handler()
1828 old_ra = regs->regs[31]; in ejtag_exception_handler()
1829 regs->cp0_epc = depc; in ejtag_exception_handler()
1830 compute_return_epc(regs); in ejtag_exception_handler()
1831 depc = regs->cp0_epc; in ejtag_exception_handler()
1832 regs->cp0_epc = old_epc; in ejtag_exception_handler()
1833 regs->regs[31] = old_ra; in ejtag_exception_handler()
1855 void __noreturn nmi_exception_handler(struct pt_regs *regs) in nmi_exception_handler() argument
1860 raw_notifier_call_chain(&nmi_chain, 0, regs); in nmi_exception_handler()
1863 smp_processor_id(), regs->cp0_epc); in nmi_exception_handler()
1864 regs->cp0_epc = read_c0_errorepc(); in nmi_exception_handler()
1865 die(str, regs); in nmi_exception_handler()