diff options
author | Christopher Celio <celio@eecs.berkeley.edu> | 2014-06-13 02:33:32 -0700 |
---|---|---|
committer | Christopher Celio <celio@eecs.berkeley.edu> | 2014-06-13 02:33:32 -0700 |
commit | 7b6a968c83af5c64db7b874e3b318ee2882b5cf1 (patch) | |
tree | e0a976bb17e6f9de58f1ea7afc097066fe9870a3 /pk/handlers.c | |
parent | e3fa35fb859dc19d5ed2246c0bd7f0189a267bfa (diff) | |
download | pk-7b6a968c83af5c64db7b874e3b318ee2882b5cf1.zip pk-7b6a968c83af5c64db7b874e3b318ee2882b5cf1.tar.gz 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.c | 2 |
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"); } |