Lines Matching refs:regs

98 int (*board_be_handler)(struct pt_regs *regs, int is_fixup);
137 static void show_backtrace(struct task_struct *task, const struct pt_regs *regs) in show_backtrace() argument
139 unsigned long sp = regs->regs[29]; in show_backtrace()
140 unsigned long ra = regs->regs[31]; in show_backtrace()
141 unsigned long pc = regs->cp0_epc; in show_backtrace()
146 if (raw_show_trace || user_mode(regs) || !__kernel_text_address(pc)) { in show_backtrace()
163 const struct pt_regs *regs) in show_stacktrace() argument
168 unsigned long __user *sp = (unsigned long __user *)regs->regs[29]; in show_stacktrace()
189 show_backtrace(task, regs); in show_stacktrace()
194 struct pt_regs regs; in show_stack() local
197 regs.regs[29] = (unsigned long)sp; in show_stack()
198 regs.regs[31] = 0; in show_stack()
199 regs.cp0_epc = 0; in show_stack()
202 regs.regs[29] = task->thread.reg29; in show_stack()
203 regs.regs[31] = 0; in show_stack()
204 regs.cp0_epc = task->thread.reg31; in show_stack()
208 memcpy(&regs, kdb_current_regs, sizeof(regs)); in show_stack()
211 prepare_frametrace(&regs); in show_stack()
219 show_stacktrace(task, &regs); in show_stack()
242 static void __show_regs(const struct pt_regs *regs) in __show_regs() argument
245 unsigned int cause = regs->cp0_cause; in __show_regs()
261 printk(" %0*lx", field, regs->regs[i]); in __show_regs()
269 printk("Acx : %0*lx\n", field, regs->acx); in __show_regs()
271 printk("Hi : %0*lx\n", field, regs->hi); in __show_regs()
272 printk("Lo : %0*lx\n", field, regs->lo); in __show_regs()
277 printk("epc : %0*lx %pS\n", field, regs->cp0_epc, in __show_regs()
278 (void *) regs->cp0_epc); in __show_regs()
279 printk("ra : %0*lx %pS\n", field, regs->regs[31], in __show_regs()
280 (void *) regs->regs[31]); in __show_regs()
282 printk("Status: %08x ", (uint32_t) regs->cp0_status); in __show_regs()
285 if (regs->cp0_status & ST0_KUO) in __show_regs()
287 if (regs->cp0_status & ST0_IEO) in __show_regs()
289 if (regs->cp0_status & ST0_KUP) in __show_regs()
291 if (regs->cp0_status & ST0_IEP) in __show_regs()
293 if (regs->cp0_status & ST0_KUC) in __show_regs()
295 if (regs->cp0_status & ST0_IEC) in __show_regs()
298 if (regs->cp0_status & ST0_KX) in __show_regs()
300 if (regs->cp0_status & ST0_SX) in __show_regs()
302 if (regs->cp0_status & ST0_UX) in __show_regs()
304 switch (regs->cp0_status & ST0_KSU) { in __show_regs()
318 if (regs->cp0_status & ST0_ERL) in __show_regs()
320 if (regs->cp0_status & ST0_EXL) in __show_regs()
322 if (regs->cp0_status & ST0_IE) in __show_regs()
331 printk("BadVA : %0*lx\n", field, regs->cp0_badvaddr); in __show_regs()
340 void show_regs(struct pt_regs *regs) in show_regs() argument
342 __show_regs((struct pt_regs *)regs); in show_regs()
345 void show_registers(struct pt_regs *regs) in show_registers() argument
350 __show_regs(regs); in show_registers()
363 if (!user_mode(regs)) in show_registers()
366 show_stacktrace(current, regs); in show_registers()
367 show_code((unsigned int __user *) regs->cp0_epc); in show_registers()
372 static int regs_to_trapnr(struct pt_regs *regs) in regs_to_trapnr() argument
374 return (regs->cp0_cause >> 2) & 0x1f; in regs_to_trapnr()
379 void __noreturn die(const char *str, struct pt_regs *regs) in die() argument
386 if (notify_die(DIE_OOPS, str, regs, 0, regs_to_trapnr(regs), in die()
395 show_registers(regs); in die()
410 if (regs && kexec_should_crash(current)) in die()
411 crash_kexec(regs); in die()
434 asmlinkage void do_be(struct pt_regs *regs) in do_be() argument
438 int data = regs->cp0_cause & 4; in do_be()
444 if (data && !user_mode(regs)) in do_be()
445 fixup = search_dbe_tables(exception_epc(regs)); in do_be()
451 action = board_be_handler(regs, fixup != NULL); in do_be()
458 regs->cp0_epc = fixup->nextinsn; in do_be()
471 field, regs->cp0_epc, field, regs->regs[31]); in do_be()
472 if (notify_die(DIE_OOPS, "bus error", regs, 0, regs_to_trapnr(regs), in do_be()
476 die_if_kernel("Oops", regs); in do_be()
513 static inline int simulate_ll(struct pt_regs *regs, unsigned int opcode) in simulate_ll() argument
529 ((unsigned long)(regs->regs[(opcode & BASE) >> 21]) + offset); in simulate_ll()
547 regs->regs[(opcode & RT) >> 16] = value; in simulate_ll()
552 static inline int simulate_sc(struct pt_regs *regs, unsigned int opcode) in simulate_sc() argument
569 ((unsigned long)(regs->regs[(opcode & BASE) >> 21]) + offset); in simulate_sc()
578 regs->regs[reg] = 0; in simulate_sc()
585 if (put_user(regs->regs[reg], vaddr)) in simulate_sc()
588 regs->regs[reg] = 1; in simulate_sc()
600 static int simulate_llsc(struct pt_regs *regs, unsigned int opcode) in simulate_llsc() argument
604 1, regs, 0); in simulate_llsc()
605 return simulate_ll(regs, opcode); in simulate_llsc()
609 1, regs, 0); in simulate_llsc()
610 return simulate_sc(regs, opcode); in simulate_llsc()
620 static int simulate_rdhwr(struct pt_regs *regs, int rd, int rt) in simulate_rdhwr() argument
625 1, regs, 0); in simulate_rdhwr()
628 regs->regs[rt] = smp_processor_id(); in simulate_rdhwr()
631 regs->regs[rt] = min(current_cpu_data.dcache.linesz, in simulate_rdhwr()
635 regs->regs[rt] = read_c0_count(); in simulate_rdhwr()
641 regs->regs[rt] = 1; in simulate_rdhwr()
644 regs->regs[rt] = 2; in simulate_rdhwr()
648 regs->regs[rt] = ti->tp_value; in simulate_rdhwr()
655 static int simulate_rdhwr_normal(struct pt_regs *regs, unsigned int opcode) in simulate_rdhwr_normal() argument
661 simulate_rdhwr(regs, rd, rt); in simulate_rdhwr_normal()
669 static int simulate_rdhwr_mm(struct pt_regs *regs, unsigned short opcode) in simulate_rdhwr_mm() argument
674 simulate_rdhwr(regs, rd, rt); in simulate_rdhwr_mm()
682 static int simulate_sync(struct pt_regs *regs, unsigned int opcode) in simulate_sync() argument
686 1, regs, 0); in simulate_sync()
693 asmlinkage void do_ov(struct pt_regs *regs) in do_ov() argument
699 .si_addr = (void __user *)regs->cp0_epc, in do_ov()
703 die_if_kernel("Integer overflow", regs); in do_ov()
766 static int simulate_fp(struct pt_regs *regs, unsigned int opcode, in simulate_fp() argument
792 regs->cp0_epc = old_epc; in simulate_fp()
793 regs->regs[31] = old_ra; in simulate_fp()
799 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1, in simulate_fp()
821 asmlinkage void do_fpe(struct pt_regs *regs, unsigned long fcr31) in do_fpe() argument
828 if (notify_die(DIE_FP, "FP exception", regs, 0, regs_to_trapnr(regs), in do_fpe()
836 die_if_kernel("FP exception in kernel code", regs); in do_fpe()
853 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 1, in do_fpe()
867 fault_addr = (void __user *) regs->cp0_epc; in do_fpe()
877 void do_trap_or_bp(struct pt_regs *regs, unsigned int code, in do_trap_or_bp() argument
884 if (kgdb_ll_trap(DIE_TRAP, str, regs, code, regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) in do_trap_or_bp()
888 if (notify_die(DIE_TRAP, str, regs, code, regs_to_trapnr(regs), in do_trap_or_bp()
902 die_if_kernel(b, regs); in do_trap_or_bp()
908 info.si_addr = (void __user *) regs->cp0_epc; in do_trap_or_bp()
912 die_if_kernel("Kernel bug detected", regs); in do_trap_or_bp()
924 if (do_dsemulret(regs)) in do_trap_or_bp()
927 die_if_kernel("Math emu break/trap", regs); in do_trap_or_bp()
932 die_if_kernel(b, regs); in do_trap_or_bp()
937 asmlinkage void do_bp(struct pt_regs *regs) in do_bp() argument
939 unsigned long epc = msk_isa16_mode(exception_epc(regs)); in do_bp()
945 if (!user_mode(regs)) in do_bp()
949 if (get_isa16_mode(regs->cp0_epc)) { in do_bp()
989 if (notify_die(DIE_BREAK, "debug", regs, bcode, in do_bp()
990 regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) in do_bp()
995 if (notify_die(DIE_SSTEPBP, "single_step", regs, bcode, in do_bp()
996 regs_to_trapnr(regs), SIGTRAP) == NOTIFY_STOP) in do_bp()
1004 do_trap_or_bp(regs, bcode, "Break"); in do_bp()
1016 asmlinkage void do_tr(struct pt_regs *regs) in do_tr() argument
1022 unsigned long epc = msk_isa16_mode(exception_epc(regs)); in do_tr()
1025 if (!user_mode(regs)) in do_tr()
1029 if (get_isa16_mode(regs->cp0_epc)) { in do_tr()
1045 do_trap_or_bp(regs, tcode, "Trap"); in do_tr()
1057 asmlinkage void do_ri(struct pt_regs *regs) in do_ri() argument
1059 unsigned int __user *epc = (unsigned int __user *)exception_epc(regs); in do_ri()
1060 unsigned long old_epc = regs->cp0_epc; in do_ri()
1061 unsigned long old31 = regs->regs[31]; in do_ri()
1071 likely(user_mode(regs)) && in do_ri()
1075 status = mipsr2_decoder(regs, opcode, &fcr31); in do_ri()
1096 if (notify_die(DIE_RI, "RI Fault", regs, 0, regs_to_trapnr(regs), in do_ri()
1100 die_if_kernel("Reserved instruction in kernel code", regs); in do_ri()
1102 if (unlikely(compute_return_epc(regs) < 0)) in do_ri()
1105 if (get_isa16_mode(regs->cp0_epc)) { in do_ri()
1115 status = simulate_rdhwr_mm(regs, opcode); in do_ri()
1121 status = simulate_llsc(regs, opcode); in do_ri()
1124 status = simulate_rdhwr_normal(regs, opcode); in do_ri()
1127 status = simulate_sync(regs, opcode); in do_ri()
1130 status = simulate_fp(regs, opcode, old_epc, old31); in do_ri()
1137 regs->cp0_epc = old_epc; /* Undo skip-over. */ in do_ri()
1138 regs->regs[31] = old31; in do_ri()
1193 struct pt_regs *regs = data; in default_cu2_call() local
1196 "instruction", regs); in default_cu2_call()
1328 asmlinkage void do_cpu(struct pt_regs *regs) in do_cpu() argument
1342 cpid = (regs->cp0_cause >> CAUSEB_CE) & 3; in do_cpu()
1345 die_if_kernel("do_cpu invoked from kernel context!", regs); in do_cpu()
1349 epc = (unsigned int __user *)exception_epc(regs); in do_cpu()
1350 old_epc = regs->cp0_epc; in do_cpu()
1351 old31 = regs->regs[31]; in do_cpu()
1355 if (unlikely(compute_return_epc(regs) < 0)) in do_cpu()
1358 if (get_isa16_mode(regs->cp0_epc)) { in do_cpu()
1368 status = simulate_rdhwr_mm(regs, opcode); in do_cpu()
1374 status = simulate_llsc(regs, opcode); in do_cpu()
1377 status = simulate_rdhwr_normal(regs, opcode); in do_cpu()
1384 regs->cp0_epc = old_epc; /* Undo skip-over. */ in do_cpu()
1385 regs->regs[31] = old31; in do_cpu()
1416 sig = fpu_emulator_cop1Handler(regs, &current->thread.fpu, 0, in do_cpu()
1433 raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs); in do_cpu()
1440 asmlinkage void do_msa_fpe(struct pt_regs *regs, unsigned int msacsr) in do_msa_fpe() argument
1445 if (notify_die(DIE_MSAFP, "MSA FP exception", regs, 0, in do_msa_fpe()
1446 regs_to_trapnr(regs), SIGFPE) == NOTIFY_STOP) in do_msa_fpe()
1453 die_if_kernel("do_msa_fpe invoked from kernel context!", regs); in do_msa_fpe()
1459 asmlinkage void do_msa(struct pt_regs *regs) in do_msa() argument
1471 die_if_kernel("do_msa invoked from kernel context!", regs); in do_msa()
1480 asmlinkage void do_mdmx(struct pt_regs *regs) in do_mdmx() argument
1492 asmlinkage void do_watch(struct pt_regs *regs) in do_watch() argument
1522 asmlinkage void do_mcheck(struct pt_regs *regs) in do_mcheck() argument
1525 int multi_match = regs->cp0_status & ST0_TS; in do_mcheck()
1530 show_regs(regs); in do_mcheck()
1549 if (!user_mode(regs)) in do_mcheck()
1552 show_code((unsigned int __user *) regs->cp0_epc); in do_mcheck()
1565 asmlinkage void do_mt(struct pt_regs *regs) in do_mt() argument
1595 die_if_kernel("MIPS MT Thread exception in kernel", regs); in do_mt()
1601 asmlinkage void do_dsp(struct pt_regs *regs) in do_dsp() argument
1609 asmlinkage void do_reserved(struct pt_regs *regs) in do_reserved() argument
1616 show_regs(regs); in do_reserved()
1618 (regs->cp0_cause & 0x7f) >> 2); in do_reserved()
1807 void ejtag_exception_handler(struct pt_regs *regs) in ejtag_exception_handler() argument
1824 old_epc = regs->cp0_epc; in ejtag_exception_handler()
1825 old_ra = regs->regs[31]; in ejtag_exception_handler()
1826 regs->cp0_epc = depc; in ejtag_exception_handler()
1827 compute_return_epc(regs); in ejtag_exception_handler()
1828 depc = regs->cp0_epc; in ejtag_exception_handler()
1829 regs->cp0_epc = old_epc; in ejtag_exception_handler()
1830 regs->regs[31] = old_ra; in ejtag_exception_handler()
1852 void __noreturn nmi_exception_handler(struct pt_regs *regs) in nmi_exception_handler() argument
1856 raw_notifier_call_chain(&nmi_chain, 0, regs); in nmi_exception_handler()
1859 smp_processor_id(), regs->cp0_epc); in nmi_exception_handler()
1860 regs->cp0_epc = read_c0_errorepc(); in nmi_exception_handler()
1861 die(str, regs); in nmi_exception_handler()