diff options
| author | Robert Morris <rtm@csail.mit.edu> | 2019-07-26 09:38:22 -0400 |
|---|---|---|
| committer | Robert Morris <rtm@csail.mit.edu> | 2019-07-26 09:38:22 -0400 |
| commit | fa2e2e3c81b2686229acc204ece380953a8031ea (patch) | |
| tree | 67c055fc880e8d286124814fff649c170434ea3e /kernel/trap.c | |
| parent | 8d30e21b59d2f6d48e593cd6c2399d0743971155 (diff) | |
| download | xv6-labs-2022-fa2e2e3c81b2686229acc204ece380953a8031ea.tar.xz xv6-labs-2022-fa2e2e3c81b2686229acc204ece380953a8031ea.zip | |
uservec before userret in trampoline, to match book and kernelvec
Diffstat (limited to 'kernel/trap.c')
| -rw-r--r-- | kernel/trap.c | 5 |
1 files changed, 3 insertions, 2 deletions
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, |
