aboutsummaryrefslogtreecommitdiff
path: root/pk/handlers.c
diff options
context:
space:
mode:
authorChristopher Celio <celio@eecs.berkeley.edu>2014-06-13 02:33:32 -0700
committerChristopher Celio <celio@eecs.berkeley.edu>2014-06-13 02:33:32 -0700
commit7b6a968c83af5c64db7b874e3b318ee2882b5cf1 (patch)
treee0a976bb17e6f9de58f1ea7afc097066fe9870a3 /pk/handlers.c
parente3fa35fb859dc19d5ed2246c0bd7f0189a267bfa (diff)
downloadriscv-pk-7b6a968c83af5c64db7b874e3b318ee2882b5cf1.zip
riscv-pk-7b6a968c83af5c64db7b874e3b318ee2882b5cf1.tar.gz
riscv-pk-7b6a968c83af5c64db7b874e3b318ee2882b5cf1.tar.bz2
Changes to allow spike & RTL behavior to better match each other.
- EI turned off on sys_exit. - IM/IP cleared on start. - badvaddr only saved to tf on page faults.
Diffstat (limited to 'pk/handlers.c')
-rw-r--r--pk/handlers.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/pk/handlers.c b/pk/handlers.c
index ed499ad..00bb6de 100644
--- a/pk/handlers.c
+++ b/pk/handlers.c
@@ -98,12 +98,14 @@ static void handle_fault_fetch(trapframe_t* tf)
void handle_fault_load(trapframe_t* tf)
{
+ tf->badvaddr = read_csr(badvaddr);
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);
if (handle_page_fault(tf->badvaddr, PROT_WRITE) != 0)
segfault(tf, tf->badvaddr, "store");
}