aboutsummaryrefslogtreecommitdiff
path: root/src/arm/PL0/PL0_test.c
diff options
context:
space:
mode:
authorvetch <vetch97@gmail.com>2020-01-13 12:40:38 +0100
committervetch <vetch97@gmail.com>2020-01-13 12:40:38 +0100
commit1af7591e37d09ddcd734ea07d0e999cf61c8bc5e (patch)
treea56c73c9eddeb148baffc3a31bf50edbbeb31074 /src/arm/PL0/PL0_test.c
parent300cf770698142b636da867b7e04bf2d6ae9baa4 (diff)
downloadrpi-MMU-example-1af7591e37d09ddcd734ea07d0e999cf61c8bc5e.tar.gz
rpi-MMU-example-1af7591e37d09ddcd734ea07d0e999cf61c8bc5e.zip
Great Reorganisation, modify structure and makefile
Diffstat (limited to 'src/arm/PL0/PL0_test.c')
-rw-r--r--src/arm/PL0/PL0_test.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/arm/PL0/PL0_test.c b/src/arm/PL0/PL0_test.c
new file mode 100644
index 0000000..0bfebc7
--- /dev/null
+++ b/src/arm/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);
+ }
+ }
+}