Browse Source

Zicfilp: Support enabling userspace Zicfilp mechanism

pull/311/head
Ming-Yi Lai 2 years ago
parent
commit
6c62461a1e
  1. 9
      pk/pk.c

9
pk/pk.c

@ -13,6 +13,7 @@
elf_info current; elf_info current;
long disabled_hart_mask; long disabled_hart_mask;
bool zicfilp_enabled;
static void help() static void help()
{ {
@ -22,6 +23,7 @@ static void help()
printk(" -h, --help Print this help message\n"); printk(" -h, --help Print this help message\n");
printk(" -p Disable on-demand program paging\n"); printk(" -p Disable on-demand program paging\n");
printk(" -s Print cycles upon termination\n"); printk(" -s Print cycles upon termination\n");
printk(" --zicfilp Enable Zicfilp CFI mechanism for user program\n");
shutdown(0); shutdown(0);
} }
@ -54,6 +56,11 @@ static void handle_option(const char* arg)
return; return;
} }
if (strcmp(arg, "--zicfilp") == 0) {
zicfilp_enabled = true;
return;
}
panic("unrecognized option: `%s'", arg); panic("unrecognized option: `%s'", arg);
suggest_help(); suggest_help();
} }
@ -177,6 +184,8 @@ static void run_loaded_program(size_t argc, char** argv, uintptr_t kstack_top)
init_tf(&tf, current.entry, stack_top); init_tf(&tf, current.entry, stack_top);
__riscv_flush_icache(); __riscv_flush_icache();
write_csr(sscratch, kstack_top); write_csr(sscratch, kstack_top);
if (zicfilp_enabled)
set_csr(senvcfg, SENVCFG_LPE);
start_user(&tf); start_user(&tf);
} }

Loading…
Cancel
Save