aboutsummaryrefslogtreecommitdiff
path: root/pk/handlers.c
diff options
context:
space:
mode:
Diffstat (limited to 'pk/handlers.c')
-rw-r--r--pk/handlers.c36
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]);