From 09521e8550750172e7f137d1ed2845c95eefc0b6 Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Tue, 18 May 2021 18:33:26 -0700 Subject: Add 2-stage translation (for debugging purposes only) --- pk/handlers.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'pk/handlers.c') diff --git a/pk/handlers.c b/pk/handlers.c index 4b4abaf..0a7fd23 100644 --- a/pk/handlers.c +++ b/pk/handlers.c @@ -78,6 +78,12 @@ static void handle_fault_store(trapframe_t* tf) segfault(tf, tf->badvaddr, "store"); } +static void handle_guest_fault(trapframe_t* tf) +{ + if (handle_guest_page_fault(tf->badvaddr) != 0) + panic("Unexpected guest fault @ %p!\n", tf->badvaddr); +} + static void handle_syscall(trapframe_t* tf) { tf->gpr[10] = do_syscall(tf->gpr[10], tf->gpr[11], tf->gpr[12], tf->gpr[13], @@ -110,6 +116,9 @@ void handle_trap(trapframe_t* tf) [CAUSE_MISALIGNED_STORE] = handle_misaligned_store, [CAUSE_LOAD_PAGE_FAULT] = handle_fault_load, [CAUSE_STORE_PAGE_FAULT] = handle_fault_store, + [CAUSE_FETCH_GUEST_PAGE_FAULT] = handle_guest_fault, + [CAUSE_LOAD_GUEST_PAGE_FAULT] = handle_guest_fault, + [CAUSE_STORE_GUEST_PAGE_FAULT] = handle_guest_fault, }; kassert(tf->cause < ARRAY_SIZE(trap_handlers) && trap_handlers[tf->cause]); -- cgit v1.1