Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/riscv/trap.c
Show First 20 Lines • Show All 173 Lines • ▼ Show 20 Lines | page_fault_handler(struct trapframe *frame, int usermode) | ||||
struct vm_map *map; | struct vm_map *map; | ||||
uint64_t stval; | uint64_t stval; | ||||
struct thread *td; | struct thread *td; | ||||
struct pcb *pcb; | struct pcb *pcb; | ||||
vm_prot_t ftype; | vm_prot_t ftype; | ||||
vm_offset_t va; | vm_offset_t va; | ||||
struct proc *p; | struct proc *p; | ||||
int error, sig, ucode; | int error, sig, ucode; | ||||
#ifdef KDB | |||||
bool handled; | |||||
#endif | |||||
#ifdef KDB | #ifdef KDB | ||||
if (kdb_active) { | if (kdb_active) { | ||||
kdb_reenter(); | kdb_reenter(); | ||||
return; | return; | ||||
} | } | ||||
#endif | #endif | ||||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
done: | done: | ||||
if (usermode) | if (usermode) | ||||
userret(td, frame); | userret(td, frame); | ||||
return; | return; | ||||
fatal: | fatal: | ||||
dump_regs(frame); | dump_regs(frame); | ||||
#ifdef KDB | |||||
if (debugger_on_trap) { | |||||
kdb_why = KDB_WHY_TRAP; | |||||
handled = kdb_trap(frame->tf_scause & SCAUSE_CODE, 0, frame); | |||||
kdb_why = KDB_WHY_UNSET; | |||||
if (handled) | |||||
return; | |||||
} | |||||
#endif | |||||
panic("Fatal page fault at %#lx: %#016lx", frame->tf_sepc, stval); | panic("Fatal page fault at %#lx: %#016lx", frame->tf_sepc, stval); | ||||
} | } | ||||
void | void | ||||
do_trap_supervisor(struct trapframe *frame) | do_trap_supervisor(struct trapframe *frame) | ||||
{ | { | ||||
uint64_t exception; | uint64_t exception; | ||||
▲ Show 20 Lines • Show All 129 Lines • Show Last 20 Lines |