EXPORT return_from_exception\r
EXPORT enter_monitor_mode\r
EXPORT copy_cpsr_into_spsr\r
+ EXPORT set_non_secure_mode\r
\r
AREA Helper, CODE, READONLY\r
\r
msr spsr_cxsf, r0\r
bx lr\r
\r
+// Set the Non Secure Mode\r
+set_non_secure_mode\r
+ push { r1 }\r
+ and r0, r0, #0x1f // Keep only the mode bits\r
+ mrs r1, spsr // Read the spsr\r
+ bic r1, r1, #0x1f // Clear all mode bits\r
+ orr r1, r1, r0\r
+ msr spsr_cxsf, r1 // write back spsr (may have caused a mode switch)\r
+ isb\r
+ pop { r1 }\r
+ bx lr // return (hopefully thumb-safe!)\r
+\r
dead\r
B dead\r
\r