summaryrefslogtreecommitdiff
path: root/riscv/riscv-probe/examples/user/user.c
diff options
context:
space:
mode:
authorCarlos Maiolino <[email protected]>2025-07-10 22:18:39 +0200
committerCarlos Maiolino <[email protected]>2025-07-10 22:18:39 +0200
commit8c6fc0c15415b32080a848bbde640e104098cf13 (patch)
tree04a21bd28f9dc82c8e216390d6208ed93b9bcd11 /riscv/riscv-probe/examples/user/user.c
Initial drop
Add some riscv code Signed-off-by: Carlos Maiolino <[email protected]>
Diffstat (limited to 'riscv/riscv-probe/examples/user/user.c')
-rw-r--r--riscv/riscv-probe/examples/user/user.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/riscv/riscv-probe/examples/user/user.c b/riscv/riscv-probe/examples/user/user.c
new file mode 100644
index 0000000..e37397f
--- /dev/null
+++ b/riscv/riscv-probe/examples/user/user.c
@@ -0,0 +1,27 @@
+#include "femto.h"
+
+#ifdef __riscv
+#include "arch/riscv/encoding.h"
+#include "arch/riscv/machine.h"
+#endif
+
+int main(int argc, char **argv)
+{
+ /*
+ * Set up PMP (Physical Memory Protection)
+ *
+ * PMP is optional; bit if implemented enforcement is mandatory
+ * and user-mode is prevented access to all memory by default.
+ * We should change this code to restrict user mode to its .text
+ * .rodata, .data, .bss and devices.
+ */
+#ifdef __riscv
+ if (pmp_entry_count() > 0) {
+ pmp_allow_all();
+ }
+ mode_set_and_continue(PRV_U);
+ puts("riscv-user-mode");
+#else
+ puts("architecture-not-supported");
+#endif
+}