Lines Matching refs:regs

52 	struct pt_regs *regs, const char *loglvl);
78 static void print_gr(const char *level, struct pt_regs *regs)
85 printbinary(buf, regs->gr[0], 32);
89 PRINTREGS(level, regs->gr, "r", RFMT, i);
92 static void print_fr(const char *level, struct pt_regs *regs)
116 PRINTREGS(level, regs->fr, "fr", FFMT, i);
119 void show_regs(struct pt_regs *regs)
125 user = user_mode(regs);
130 print_gr(level, regs);
133 PRINTREGS(level, regs->sr, "sr", RFMT, i);
136 print_fr(level, regs);
142 level, regs->iasq[0], regs->iasq[1], regs->iaoq[0], regs->iaoq[1]);
144 level, regs->iir, regs->isr, regs->ior);
147 printk("%s ORIG_R28: " RFMT "\n", level, regs->orig_r28);
150 printk("%s IAOQ[0]: " RFMT "\n", level, regs->iaoq[0]);
151 printk("%s IAOQ[1]: " RFMT "\n", level, regs->iaoq[1]);
152 printk("%s RP(r2): " RFMT "\n", level, regs->gr[2]);
154 printk("%s IAOQ[0]: %pS\n", level, (void *) regs->iaoq[0]);
155 printk("%s IAOQ[1]: %pS\n", level, (void *) regs->iaoq[1]);
156 printk("%s RP(r2): %pS\n", level, (void *) regs->gr[2]);
158 parisc_show_stack(current, regs, KERN_DEFAULT);
165 #define parisc_printk_ratelimited(critical, regs, fmt, ...) { \
168 show_regs(regs); \
192 struct pt_regs *regs, const char *loglvl)
196 unwind_frame_init_task(&info, task, regs);
211 void die_if_kernel(char *str, struct pt_regs *regs, long err)
213 if (user_mode(regs)) {
217 parisc_printk_ratelimited(1, regs,
219 current->comm, task_pid_nr(current), str, err, regs->iaoq[0]);
260 show_regs(regs);
276 static void handle_gdb_break(struct pt_regs *regs, int wot)
279 (void __user *) (regs->iaoq[0] & ~3));
282 static void handle_break(struct pt_regs *regs)
284 unsigned iir = regs->iir;
286 if (unlikely(iir == PARISC_BUG_BREAK_INSN && !user_mode(regs))) {
289 tt = report_bug(regs->iaoq[0] & ~3, regs);
291 regs->iaoq[0] += 4;
292 regs->iaoq[1] += 4;
295 die_if_kernel("Unknown kernel breakpoint", regs,
301 parisc_kprobe_break_handler(regs);
309 iir == PARISC_KGDB_BREAK_INSN)) && !user_mode(regs)) {
310 kgdb_handle_exception(9, SIGTRAP, 0, regs);
316 parisc_printk_ratelimited(0, regs,
322 handle_gdb_break(regs, TRAP_BRKPT);
325 static void default_trap(int code, struct pt_regs *regs)
328 show_regs(regs);
331 void (*cpu_lpmc) (int code, struct pt_regs *regs) __read_mostly = default_trap;
334 void transfer_pim_to_trap_frame(struct pt_regs *regs)
352 regs->gr[0] = pim_wide->cr[22];
355 regs->gr[i] = pim_wide->gr[i];
358 regs->fr[i] = pim_wide->fr[i];
361 regs->sr[i] = pim_wide->sr[i];
363 regs->iasq[0] = pim_wide->cr[17];
364 regs->iasq[1] = pim_wide->iasq_back;
365 regs->iaoq[0] = pim_wide->cr[18];
366 regs->iaoq[1] = pim_wide->iaoq_back;
368 regs->sar = pim_wide->cr[11];
369 regs->iir = pim_wide->cr[19];
370 regs->isr = pim_wide->cr[20];
371 regs->ior = pim_wide->cr[21];
376 regs->gr[0] = pim_narrow->cr[22];
379 regs->gr[i] = pim_narrow->gr[i];
382 regs->fr[i] = pim_narrow->fr[i];
385 regs->sr[i] = pim_narrow->sr[i];
387 regs->iasq[0] = pim_narrow->cr[17];
388 regs->iasq[1] = pim_narrow->iasq_back;
389 regs->iaoq[0] = pim_narrow->cr[18];
390 regs->iaoq[1] = pim_narrow->iaoq_back;
392 regs->sar = pim_narrow->cr[11];
393 regs->iir = pim_narrow->cr[19];
394 regs->isr = pim_narrow->cr[20];
395 regs->ior = pim_narrow->cr[21];
403 regs->ksp = 0;
404 regs->kpc = 0;
405 regs->orig_r28 = 0;
414 void parisc_terminate(char *msg, struct pt_regs *regs, int code, unsigned long offset)
418 (void)notify_die(DIE_OOPS, msg, regs, 0, code, SIGTRAP);
436 transfer_pim_to_trap_frame(regs);
445 /* show_stack(NULL, (unsigned long *)regs->gr[30]); */
447 unwind_frame_init(&info, current, regs);
454 show_regs(regs);
475 void notrace handle_interruption(int code, struct pt_regs *regs)
506 if (((unsigned long)regs->iaoq[0] & 3) &&
507 ((unsigned long)regs->iasq[0] != (unsigned long)regs->sr[7])) {
509 regs->iaoq[0] = 0 | 3;
510 regs->iaoq[1] = regs->iaoq[0] + 4;
511 regs->iasq[0] = regs->iasq[1] = regs->sr[7];
512 regs->gr[0] &= ~PSW_B;
529 regs, code, 0);
539 regs->gr[0] &= ~PSW_R;
542 if (parisc_kprobe_ss_handler(regs))
548 kgdb_handle_exception(0, SIGTRAP, 0, regs);
553 if (user_space(regs))
554 handle_gdb_break(regs, TRAP_TRACE);
564 cpu_lpmc(5, regs);
569 fault_address = regs->iaoq[0];
570 fault_space = regs->iasq[0];
575 die_if_kernel("Illegal instruction", regs, code);
581 handle_break(regs);
586 die_if_kernel("Privileged operation", regs, code);
592 if ((regs->iir & 0xffdfffe0) == 0x034008a0) {
598 if (regs->iir & 0x00200000)
599 regs->gr[regs->iir & 0x1f] = mfctl(27);
601 regs->gr[regs->iir & 0x1f] = mfctl(26);
603 regs->iaoq[0] = regs->iaoq[1];
604 regs->iaoq[1] += 4;
605 regs->iasq[0] = regs->iasq[1];
609 die_if_kernel("Privileged register usage", regs, code);
613 (void __user *) regs->iaoq[0]);
619 (void __user *) regs->iaoq[0]);
626 if(user_mode(regs)){
631 (void __user *) regs->iaoq[0]);
639 die_if_kernel("Floating point exception", regs, 0); /* quiet */
641 handle_fpe(regs);
664 if (code == 17 && handle_nadtlb_fault(regs))
666 fault_address = regs->ior;
667 fault_space = regs->isr;
673 if (check_unaligned(regs)) {
674 handle_unaligned(regs);
680 fault_address = regs->ior;
681 fault_space = regs->isr;
686 regs->gr[0] |= PSW_X; /* So we can single-step over the trap */
690 handle_gdb_break(regs, TRAP_HWBKPT);
695 regs->gr[0] &= ~PSW_T;
696 if (user_space(regs))
697 handle_gdb_break(regs, TRAP_BRANCH);
718 if (user_mode(regs)) {
722 vma = find_vma(current->mm,regs->iaoq[0]);
723 if (vma && (regs->iaoq[0] >= vma->vm_start)
726 fault_address = regs->iaoq[0];
727 fault_space = regs->iasq[0];
735 regs->iir = 0xbaadf00d;
739 if (code == 27 && !user_mode(regs) &&
740 fixup_exception(regs))
743 die_if_kernel("Protection id trap", regs, code);
746 ((void __user *) regs->iaoq[0]) :
747 ((void __user *) regs->ior));
752 handle_unaligned(regs);
756 if (user_mode(regs)) {
757 parisc_printk_ratelimited(0, regs, KERN_DEBUG
762 (void __user *)regs->ior);
767 parisc_terminate("Unexpected interruption", regs, code, 0);
771 if (user_mode(regs)) {
772 if ((fault_space >> SPACEID_SHIFT) != (regs->sr[7] >> SPACEID_SHIFT)) {
773 parisc_printk_ratelimited(0, regs, KERN_DEBUG
778 (void __user *)regs->ior);
792 if (fixup_exception(regs))
795 parisc_terminate("Kernel Fault", regs, code, fault_address);
799 do_page_fault(regs, code, fault_address);