diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-06-24 14:13:08 -0700 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-06-24 14:14:01 -0700 |
commit | 027ba300cbeaa425218fd472e1fcf45c785f645c (patch) | |
tree | 4b4e42b54abf1d7137e5aa099d44319673b7269d /pk/handlers.c | |
parent | 621793b43ae825188af584e5789ade2e2527c9f8 (diff) | |
download | riscv-pk-027ba300cbeaa425218fd472e1fcf45c785f645c.zip riscv-pk-027ba300cbeaa425218fd472e1fcf45c785f645c.tar.gz riscv-pk-027ba300cbeaa425218fd472e1fcf45c785f645c.tar.bz2 |
Use sbadaddr (not sepc) to resolve instruction page faults
Diffstat (limited to 'pk/handlers.c')
-rw-r--r-- | pk/handlers.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/pk/handlers.c b/pk/handlers.c index c1f7c2b..881cc17 100644 --- a/pk/handlers.c +++ b/pk/handlers.c @@ -53,20 +53,18 @@ static void segfault(trapframe_t* tf, uintptr_t addr, const char* type) static void handle_fault_fetch(trapframe_t* tf) { - if (handle_page_fault(tf->epc, PROT_EXEC) != 0) - segfault(tf, tf->epc, "fetch"); + if (handle_page_fault(tf->badvaddr, PROT_EXEC) != 0) + segfault(tf, tf->badvaddr, "fetch"); } void handle_fault_load(trapframe_t* tf) { - tf->badvaddr = read_csr(sbadaddr); 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(sbadaddr); if (handle_page_fault(tf->badvaddr, PROT_WRITE) != 0) segfault(tf, tf->badvaddr, "store"); } |