diff options
author | Andrew Waterman <andrew@sifive.com> | 2024-09-26 15:43:17 -0700 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2024-09-26 15:44:19 -0700 |
commit | 7f3bef01193137e3227fcf88bece86f5234b9bc5 (patch) | |
tree | 7f9aa70b4cd2661e6b12a91285f0d5c48f07ea0a | |
parent | 47a2e87ccd4e95f80f0754c6f3312ccb3b90d916 (diff) | |
download | riscv-pk-master.zip riscv-pk-master.tar.gz riscv-pk-master.tar.bz2 |
-rw-r--r-- | machine/minit.c | 2 | ||||
-rw-r--r-- | pk/pk.c | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/machine/minit.c b/machine/minit.c index ceae9f0..3174409 100644 --- a/machine/minit.c +++ b/machine/minit.c @@ -246,7 +246,7 @@ void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1 mstatus = INSERT_FIELD(mstatus, MSTATUS_MPIE, 0); write_csr(mstatus, mstatus); write_csr(mscratch, MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE); - write_csr(menvcfg, MENVCFG_SSE); + write_csr(menvcfg, MENVCFG_SSE | MENVCFG_CBCFE | INSERT_FIELD(0, MENVCFG_CBIE, 1)); #ifndef __riscv_flen uintptr_t *p_fcsr = (uintptr_t*)(MACHINE_STACK_TOP() - MENTRY_FRAME_SIZE); // the x0's save slot *p_fcsr = 0; @@ -122,6 +122,8 @@ static void run_loaded_program(size_t argc, char** argv, uintptr_t kstack_top) write_csr(ssp, shadow_stack_top); } + set_csr(senvcfg, SENVCFG_CBCFE | INSERT_FIELD(0, SENVCFG_CBIE, 1)); + // copy phdrs to user stack size_t stack_top = current.stack_top - current.phdr_size; memcpy_to_user((void*)stack_top, (void*)current.phdr, current.phdr_size); |