Lines Matching refs:frame

61 #include <machine/frame.h>
165 dump_regs(struct trapframe *frame)
170 for (i = 0; i < nitems(frame->tf_t); i++) {
172 print_with_symbol(name, frame->tf_t[i]);
175 for (i = 0; i < nitems(frame->tf_s); i++) {
177 print_with_symbol(name, frame->tf_s[i]);
180 for (i = 0; i < nitems(frame->tf_a); i++) {
182 print_with_symbol(name, frame->tf_a[i]);
185 print_with_symbol("ra", frame->tf_ra);
186 print_with_symbol("sp", frame->tf_sp);
187 print_with_symbol("gp", frame->tf_gp);
188 print_with_symbol("tp", frame->tf_tp);
189 print_with_symbol("sepc", frame->tf_sepc);
190 printf("sstatus: 0x%016lx\n", frame->tf_sstatus);
191 printf("stval : 0x%016lx\n", frame->tf_stval);
206 page_fault_handler(struct trapframe *frame, int usermode)
230 stval = frame->tf_stval;
240 frame->tf_scause & SCAUSE_CODE);
262 if (frame->tf_scause == SCAUSE_STORE_PAGE_FAULT) {
264 } else if (frame->tf_scause == SCAUSE_INST_PAGE_FAULT) {
277 frame->tf_scause & SCAUSE_CODE);
280 frame->tf_a[0] = error;
281 frame->tf_sepc = pcb->pcb_onfault;
290 userret(td, frame);
294 dump_regs(frame);
298 handled = kdb_trap(frame->tf_scause & SCAUSE_CODE, 0, frame);
304 panic("Fatal page fault at %#lx: %#lx", frame->tf_sepc, stval);
308 do_trap_supervisor(struct trapframe *frame)
319 exception = frame->tf_scause & SCAUSE_CODE;
320 if ((frame->tf_scause & SCAUSE_INTR) != 0) {
322 intr_irq_handler(frame);
327 if (dtrace_trap_func != NULL && (*dtrace_trap_func)(frame, exception))
332 exception, frame->tf_sepc, frame->tf_stval);
338 dump_regs(frame);
340 frame->tf_sepc, frame->tf_stval);
345 dump_regs(frame);
347 frame->tf_sepc, frame->tf_stval);
352 page_fault_handler(frame, 0);
357 dtrace_invop_jump_addr(frame) == 0)
361 kdb_trap(exception, 0, frame);
363 dump_regs(frame);
368 dump_regs(frame);
370 (frame->tf_stval & 0x3) != 0x3 ? 4 : 8,
371 frame->tf_stval, frame->tf_sepc);
374 dump_regs(frame);
376 exception, frame->tf_stval);
381 do_trap_user(struct trapframe *frame)
390 KASSERT(td->td_frame == frame,
391 ("%s: td_frame %p != frame %p", __func__, td->td_frame, frame));
400 exception = frame->tf_scause & SCAUSE_CODE;
401 if ((frame->tf_scause & SCAUSE_INTR) != 0) {
403 intr_irq_handler(frame);
409 exception, frame->tf_sepc, frame->tf_stval);
415 call_trapsignal(td, SIGBUS, BUS_ADRERR, (void *)frame->tf_sepc,
417 userret(td, frame);
422 call_trapsignal(td, SIGBUS, BUS_ADRALN, (void *)frame->tf_sepc,
424 userret(td, frame);
429 page_fault_handler(frame, 1);
432 frame->tf_sepc += 4; /* Next instruction */
442 frame->tf_sstatus &= ~SSTATUS_FS_MASK;
443 frame->tf_sstatus |= SSTATUS_FS_CLEAN;
447 call_trapsignal(td, SIGILL, ILL_ILLTRP, (void *)frame->tf_sepc,
449 userret(td, frame);
452 call_trapsignal(td, SIGTRAP, TRAP_BRKPT, (void *)frame->tf_sepc,
454 userret(td, frame);
457 dump_regs(frame);
459 exception, frame->tf_stval);