Lines Matching full:regs

42 asmlinkage void unhandled_exception(struct pt_regs *regs, int ea, int vector);
43 asmlinkage void do_trap(struct pt_regs *regs, unsigned long address);
44 asmlinkage void do_fpe_trap(struct pt_regs *regs, unsigned long address);
45 asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address);
46 asmlinkage void do_bus_fault(struct pt_regs *regs, unsigned long address);
47 asmlinkage void do_illegal_instruction(struct pt_regs *regs,
76 void show_registers(struct pt_regs *regs) in show_registers() argument
82 esp = (unsigned long)(regs->sp); in show_registers()
83 if (user_mode(regs)) in show_registers()
88 smp_processor_id(), regs->pc, regs->sr, regs->sp, in show_registers()
89 regs->fpcsr); in show_registers()
91 0L, regs->gpr[1], regs->gpr[2], regs->gpr[3]); in show_registers()
93 regs->gpr[4], regs->gpr[5], regs->gpr[6], regs->gpr[7]); in show_registers()
95 regs->gpr[8], regs->gpr[9], regs->gpr[10], regs->gpr[11]); in show_registers()
97 regs->gpr[12], regs->gpr[13], regs->gpr[14], regs->gpr[15]); in show_registers()
99 regs->gpr[16], regs->gpr[17], regs->gpr[18], regs->gpr[19]); in show_registers()
101 regs->gpr[20], regs->gpr[21], regs->gpr[22], regs->gpr[23]); in show_registers()
103 regs->gpr[24], regs->gpr[25], regs->gpr[26], regs->gpr[27]); in show_registers()
105 regs->gpr[28], regs->gpr[29], regs->gpr[30], regs->gpr[31]); in show_registers()
107 regs->gpr[11], regs->orig_gpr11); in show_registers()
137 if (regs->pc < PAGE_OFFSET) in show_registers()
143 if (__get_user(word, &((unsigned long *)regs->pc)[i])) { in show_registers()
149 print_data(regs->pc, word, i); in show_registers()
156 void __noreturn die(const char *str, struct pt_regs *regs, long err) in die() argument
161 show_registers(regs); in die()
174 asmlinkage void unhandled_exception(struct pt_regs *regs, int ea, int vector) in unhandled_exception() argument
178 die("Oops", regs, 9); in unhandled_exception()
181 asmlinkage void do_fpe_trap(struct pt_regs *regs, unsigned long address) in do_fpe_trap() argument
183 if (user_mode(regs)) { in do_fpe_trap()
185 unsigned long fpcsr = regs->fpcsr; in do_fpe_trap()
199 regs->fpcsr &= ~SPR_FPCSR_ALLF; in do_fpe_trap()
201 force_sig_fault(SIGFPE, code, (void __user *)regs->pc); in do_fpe_trap()
203 pr_emerg("KERNEL: Illegal fpe exception 0x%.8lx\n", regs->pc); in do_fpe_trap()
204 die("Die:", regs, SIGFPE); in do_fpe_trap()
208 asmlinkage void do_trap(struct pt_regs *regs, unsigned long address) in do_trap() argument
210 if (user_mode(regs)) { in do_trap()
211 force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc); in do_trap()
213 pr_emerg("KERNEL: Illegal trap exception 0x%.8lx\n", regs->pc); in do_trap()
214 die("Die:", regs, SIGILL); in do_trap()
218 asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address) in do_unaligned_access() argument
220 if (user_mode(regs)) { in do_unaligned_access()
225 show_registers(regs); in do_unaligned_access()
226 die("Die:", regs, address); in do_unaligned_access()
231 asmlinkage void do_bus_fault(struct pt_regs *regs, unsigned long address) in do_bus_fault() argument
233 if (user_mode(regs)) { in do_bus_fault()
238 show_registers(regs); in do_bus_fault()
239 die("Die:", regs, address); in do_bus_fault()
243 static inline int in_delay_slot(struct pt_regs *regs) in in_delay_slot() argument
249 insn = *((unsigned int *)regs->pc); in in_delay_slot()
267 static inline void adjust_pc(struct pt_regs *regs, unsigned long address) in adjust_pc() argument
272 if (unlikely(in_delay_slot(regs))) { in adjust_pc()
274 jmp = *((unsigned int *)regs->pc); in adjust_pc()
282 regs->pc += displacement; in adjust_pc()
285 regs->pc += displacement; in adjust_pc()
286 regs->gpr[9] = regs->pc + 8; in adjust_pc()
289 if (regs->sr & SPR_SR_F) in adjust_pc()
290 regs->pc += 8; in adjust_pc()
292 regs->pc += displacement; in adjust_pc()
295 if (regs->sr & SPR_SR_F) in adjust_pc()
296 regs->pc += displacement; in adjust_pc()
298 regs->pc += 8; in adjust_pc()
301 regs->pc = regs->gpr[rb]; in adjust_pc()
304 regs->pc = regs->gpr[rb]; in adjust_pc()
305 regs->gpr[9] = regs->pc + 8; in adjust_pc()
311 regs->pc += 4; in adjust_pc()
315 static inline void simulate_lwa(struct pt_regs *regs, unsigned long address, in simulate_lwa() argument
325 orig_pc = regs->pc; in simulate_lwa()
326 adjust_pc(regs, address); in simulate_lwa()
331 lwa_addr = (unsigned long __user *)(regs->gpr[ra] + imm); in simulate_lwa()
334 do_unaligned_access(regs, address); in simulate_lwa()
339 if (user_mode(regs)) { in simulate_lwa()
345 regs->pc = entry->fixup; in simulate_lwa()
354 regs->gpr[rd] = value; in simulate_lwa()
357 static inline void simulate_swa(struct pt_regs *regs, unsigned long address, in simulate_swa() argument
367 orig_pc = regs->pc; in simulate_swa()
368 adjust_pc(regs, address); in simulate_swa()
373 vaddr = (unsigned long __user *)(regs->gpr[ra] + imm); in simulate_swa()
376 regs->sr &= ~SPR_SR_F; in simulate_swa()
381 do_unaligned_access(regs, address); in simulate_swa()
385 if (put_user(regs->gpr[rb], vaddr)) { in simulate_swa()
386 if (user_mode(regs)) { in simulate_swa()
392 regs->pc = entry->fixup; in simulate_swa()
397 *((unsigned long *)vaddr) = regs->gpr[rb]; in simulate_swa()
401 regs->sr |= SPR_SR_F; in simulate_swa()
407 asmlinkage void do_illegal_instruction(struct pt_regs *regs, in do_illegal_instruction() argument
417 simulate_lwa(regs, address, insn); in do_illegal_instruction()
421 simulate_swa(regs, address, insn); in do_illegal_instruction()
428 if (user_mode(regs)) { in do_illegal_instruction()
434 show_registers(regs); in do_illegal_instruction()
435 die("Die:", regs, address); in do_illegal_instruction()