diff options
Diffstat (limited to 'pk/handlers.c')
-rw-r--r-- | pk/handlers.c | 36 |
1 files changed, 4 insertions, 32 deletions
diff --git a/pk/handlers.c b/pk/handlers.c index 2b5bf22..35adefc 100644 --- a/pk/handlers.c +++ b/pk/handlers.c @@ -4,23 +4,6 @@ #include "config.h" #include "syscall.h" #include "vm.h" - -static void handle_accelerator_disabled(trapframe_t* tf) -{ - if (have_accelerator) - tf->sr |= SR_EA; - else - { - dump_tf(tf); - panic("No accelerator hardware!"); - } -} - -static void handle_privileged_instruction(trapframe_t* tf) -{ - dump_tf(tf); - panic("A privileged instruction was executed!"); -} static void handle_illegal_instruction(trapframe_t* tf) { @@ -49,14 +32,6 @@ static void handle_illegal_instruction(trapframe_t* tf) panic("An illegal instruction was executed!"); } -static void handle_fp_disabled(trapframe_t* tf) -{ - if (have_fp && !(read_csr(status) & SR_EF)) - init_fp(tf); - else - handle_illegal_instruction(tf); -} - static void handle_breakpoint(trapframe_t* tf) { dump_tf(tf); @@ -86,7 +61,7 @@ void handle_misaligned_store(trapframe_t* tf) static void segfault(trapframe_t* tf, uintptr_t addr, const char* type) { dump_tf(tf); - const char* who = (tf->sr & SR_PS) ? "Kernel" : "User"; + const char* who = (tf->status & MSTATUS_PRV1) ? "Kernel" : "User"; panic("%s %s segfault @ %p", who, type, addr); } @@ -98,14 +73,14 @@ static void handle_fault_fetch(trapframe_t* tf) void handle_fault_load(trapframe_t* tf) { - tf->badvaddr = read_csr(badvaddr); + tf->badvaddr = read_csr(mbadaddr); if (handle_page_fault(tf->badvaddr, PROT_READ) != 0) segfault(tf, tf->badvaddr, "load"); } void handle_fault_store(trapframe_t* tf) { - tf->badvaddr = read_csr(badvaddr); + tf->badvaddr = read_csr(mbadaddr); if (handle_page_fault(tf->badvaddr, PROT_WRITE) != 0) segfault(tf, tf->badvaddr, "store"); } @@ -119,7 +94,7 @@ static void handle_syscall(trapframe_t* tf) void handle_trap(trapframe_t* tf) { - set_csr(status, SR_EI); + set_csr(mstatus, MSTATUS_IE); typedef void (*trap_handler)(trapframe_t*); @@ -127,15 +102,12 @@ void handle_trap(trapframe_t* tf) [CAUSE_MISALIGNED_FETCH] = handle_misaligned_fetch, [CAUSE_FAULT_FETCH] = handle_fault_fetch, [CAUSE_ILLEGAL_INSTRUCTION] = handle_illegal_instruction, - [CAUSE_PRIVILEGED_INSTRUCTION] = handle_privileged_instruction, - [CAUSE_FP_DISABLED] = handle_fp_disabled, [CAUSE_SYSCALL] = handle_syscall, [CAUSE_BREAKPOINT] = handle_breakpoint, [CAUSE_MISALIGNED_LOAD] = handle_misaligned_load, [CAUSE_MISALIGNED_STORE] = handle_misaligned_store, [CAUSE_FAULT_LOAD] = handle_fault_load, [CAUSE_FAULT_STORE] = handle_fault_store, - [CAUSE_ACCELERATOR_DISABLED] = handle_accelerator_disabled, }; kassert(tf->cause < ARRAY_SIZE(trap_handlers) && trap_handlers[tf->cause]); |