diff options
author | Wojtek Kosior <kwojtus@protonmail.com> | 2019-12-10 16:46:56 +0100 |
---|---|---|
committer | Wojtek Kosior <kwojtus@protonmail.com> | 2019-12-10 16:46:56 +0100 |
commit | 3f1cd2050271dbf548e053f0a67e365b277cfcb3 (patch) | |
tree | cef57f71beddb9bb97d35390deb29a09b2d7d98b /demo_functionality.c | |
parent | c76b34db77f06450ba1c957e87a0b1df3c6c29b4 (diff) | |
download | rpi-MMU-example-3f1cd2050271dbf548e053f0a67e365b277cfcb3.tar.gz rpi-MMU-example-3f1cd2050271dbf548e053f0a67e365b277cfcb3.zip |
re-enter system mode on invalid data access from PL0 code
Diffstat (limited to 'demo_functionality.c')
-rw-r--r-- | demo_functionality.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/demo_functionality.c b/demo_functionality.c index fbf5eb4..60b0bfa 100644 --- a/demo_functionality.c +++ b/demo_functionality.c @@ -165,3 +165,25 @@ void demo_go_unprivileged(void) "r" (VIRTUAL_PL0_MEMORY_START) : "memory", "r4", "r5", "r0"); } + +extern char + __interrupt_vectors_start, + __interrupt_vectors_end, + __interrupt_vectors_size; + +extern void (*volatile system_reentry_point)(void); + +void system_reentry(void) +{ + uart_puts("re-entered system"); + while(1); +} + +void demo_setup_interrupts(void) +{ + system_reentry_point = system_reentry; + + for (size_t i = 0; i < (size_t) &__interrupt_vectors_size; i++) + ((volatile char*) 0)[i] = + (&__interrupt_vectors_start)[i]; +} |