From fa2e2e3c81b2686229acc204ece380953a8031ea Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Fri, 26 Jul 2019 09:38:22 -0400 Subject: uservec before userret in trampoline, to match book and kernelvec --- kernel/trap.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'kernel/trap.c') diff --git a/kernel/trap.c b/kernel/trap.c index ad2d0f8..ce7a65a 100644 --- a/kernel/trap.c +++ b/kernel/trap.c @@ -9,7 +9,7 @@ struct spinlock tickslock; uint ticks; -extern char trampoline[], uservec[]; +extern char trampoline[], uservec[], userret[]; // in kernelvec.S, calls kerneltrap(). void kernelvec(); @@ -123,7 +123,8 @@ usertrapret(void) // jump to trampoline.S at the top of memory, which // switches to the user page table, restores user registers, // and switches to user mode with sret. - ((void (*)(uint64,uint64))TRAMPOLINE)(TRAPFRAME, satp); + uint64 fn = TRAMPOLINE + (userret - trampoline); + ((void (*)(uint64,uint64))fn)(TRAPFRAME, satp); } // interrupts and exceptions from kernel code go here via kernelvec, -- cgit v1.2.3