aboutsummaryrefslogtreecommitdiff
path: root/src/PL0/PL0_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/PL0/PL0_test.c')
-rw-r--r--src/PL0/PL0_test.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/PL0/PL0_test.c b/src/PL0/PL0_test.c
new file mode 100644
index 0000000..0bfebc7
--- /dev/null
+++ b/src/PL0/PL0_test.c
@@ -0,0 +1,34 @@
+#include "PL0_utils.h"
+
+// entry point - must remain the only function in the file!
+void PL0_main(void)
+{
+ // If loading program to userspace and handling of svc are
+ // implemented correctly, this shall get printed
+ puts("Hello userspace! Type 'f' if you want me to try accessing "
+ "kernel memory!");
+
+ while (1)
+ {
+ char c = getchar();
+
+ if (c == '\r')
+ putchar('\n');
+
+ putchar(c);
+
+ if (c == 'f')
+ {
+ // if we're indeed in PL0, we should trigger the abort
+ // handler now, when trying to access memory we're not
+ // allowed to
+ puts("Attempting to read kernel memory from userspace :d");
+ char first_kernel_byte[2];
+
+ first_kernel_byte[0] = *(char*) 0x0;
+ first_kernel_byte[1] = '\0';
+
+ puts(first_kernel_byte);
+ }
+ }
+}