diff options
Diffstat (limited to 'PL0_test.c')
-rw-r--r-- | PL0_test.c | 41 |
1 files changed, 24 insertions, 17 deletions
@@ -1,27 +1,34 @@ -#include "uart.h" -#include "psr.h" +#include "PL0_utils.h" +// entry point - must remain the only function in the file! void PL0_main(void) { - // if all went correct, Success! gets printed - uart_puts("Success!\n\r"); - - // if we're indeed i PL0, we should crash now, when trying to access - // memory we're not allowed to - char first_kernel_byte[2]; - - first_kernel_byte[0] = *(char*) ((uint32_t) 0x8000); - first_kernel_byte[1] = '\0'; + // 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!"); - uart_puts(first_kernel_byte); - while (1) { - char c = uart_getc(); - - uart_putc(c); + char c = getchar(); if (c == '\r') - uart_putc('\n'); + 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); + } } } |