Lines Matching full:frame

62 #include <machine/frame.h>
163 dump_regs(struct trapframe *frame) in dump_regs() argument
168 for (i = 0; i < nitems(frame->tf_t); i++) { in dump_regs()
170 print_with_symbol(name, frame->tf_t[i]); in dump_regs()
173 for (i = 0; i < nitems(frame->tf_s); i++) { in dump_regs()
175 print_with_symbol(name, frame->tf_s[i]); in dump_regs()
178 for (i = 0; i < nitems(frame->tf_a); i++) { in dump_regs()
180 print_with_symbol(name, frame->tf_a[i]); in dump_regs()
183 print_with_symbol("ra", frame->tf_ra); in dump_regs()
184 print_with_symbol("sp", frame->tf_sp); in dump_regs()
185 print_with_symbol("gp", frame->tf_gp); in dump_regs()
186 print_with_symbol("tp", frame->tf_tp); in dump_regs()
187 print_with_symbol("sepc", frame->tf_sepc); in dump_regs()
188 printf("sstatus: 0x%016lx\n", frame->tf_sstatus); in dump_regs()
189 printf("stval : 0x%016lx\n", frame->tf_stval); in dump_regs()
204 page_fault_handler(struct trapframe *frame, int usermode) in page_fault_handler() argument
228 stval = frame->tf_stval; in page_fault_handler()
233 frame->tf_scause & SCAUSE_CODE); in page_fault_handler()
242 if ((frame->tf_sstatus & SSTATUS_SPIE) != 0) in page_fault_handler()
256 if (frame->tf_scause == SCAUSE_STORE_PAGE_FAULT) { in page_fault_handler()
258 } else if (frame->tf_scause == SCAUSE_INST_PAGE_FAULT) { in page_fault_handler()
276 frame->tf_scause & SCAUSE_CODE); in page_fault_handler()
279 frame->tf_a[0] = error; in page_fault_handler()
280 frame->tf_sepc = pcb->pcb_onfault; in page_fault_handler()
289 userret(td, frame); in page_fault_handler()
293 dump_regs(frame); in page_fault_handler()
297 handled = kdb_trap(frame->tf_scause & SCAUSE_CODE, 0, frame); in page_fault_handler()
303 panic("Fatal page fault at %#lx: %#lx", frame->tf_sepc, stval); in page_fault_handler()
307 do_trap_supervisor(struct trapframe *frame) in do_trap_supervisor() argument
318 exception = frame->tf_scause & SCAUSE_CODE; in do_trap_supervisor()
319 if ((frame->tf_scause & SCAUSE_INTR) != 0) { in do_trap_supervisor()
321 intr_irq_handler(frame, INTR_ROOT_IRQ); in do_trap_supervisor()
326 if (dtrace_trap_func != NULL && (*dtrace_trap_func)(frame, exception)) in do_trap_supervisor()
331 exception, frame->tf_sepc, frame->tf_stval); in do_trap_supervisor()
337 dump_regs(frame); in do_trap_supervisor()
339 frame->tf_sepc, frame->tf_stval); in do_trap_supervisor()
344 dump_regs(frame); in do_trap_supervisor()
346 frame->tf_sepc, frame->tf_stval); in do_trap_supervisor()
351 page_fault_handler(frame, 0); in do_trap_supervisor()
356 dtrace_invop_jump_addr(frame) == 0) in do_trap_supervisor()
360 kdb_trap(exception, 0, frame); in do_trap_supervisor()
362 dump_regs(frame); in do_trap_supervisor()
367 dump_regs(frame); in do_trap_supervisor()
369 (frame->tf_stval & 0x3) != 0x3 ? 4 : 8, in do_trap_supervisor()
370 frame->tf_stval, frame->tf_sepc); in do_trap_supervisor()
373 dump_regs(frame); in do_trap_supervisor()
375 exception, frame->tf_stval); in do_trap_supervisor()
380 do_trap_user(struct trapframe *frame) in do_trap_user() argument
389 KASSERT(td->td_frame == frame, in do_trap_user()
390 ("%s: td_frame %p != frame %p", __func__, td->td_frame, frame)); in do_trap_user()
399 exception = frame->tf_scause & SCAUSE_CODE; in do_trap_user()
400 if ((frame->tf_scause & SCAUSE_INTR) != 0) { in do_trap_user()
402 intr_irq_handler(frame, INTR_ROOT_IRQ); in do_trap_user()
408 exception, frame->tf_sepc, frame->tf_stval); in do_trap_user()
414 call_trapsignal(td, SIGBUS, BUS_ADRERR, (void *)frame->tf_sepc, in do_trap_user()
416 userret(td, frame); in do_trap_user()
421 call_trapsignal(td, SIGBUS, BUS_ADRALN, (void *)frame->tf_sepc, in do_trap_user()
423 userret(td, frame); in do_trap_user()
428 page_fault_handler(frame, 1); in do_trap_user()
431 frame->tf_sepc += 4; /* Next instruction */ in do_trap_user()
441 frame->tf_sstatus &= ~SSTATUS_FS_MASK; in do_trap_user()
442 frame->tf_sstatus |= SSTATUS_FS_CLEAN; in do_trap_user()
446 call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)frame->tf_sepc, in do_trap_user()
448 userret(td, frame); in do_trap_user()
451 call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_sepc, in do_trap_user()
453 userret(td, frame); in do_trap_user()
456 dump_regs(frame); in do_trap_user()
458 exception, frame->tf_stval); in do_trap_user()