GCC_ASM_EXPORT(return_from_exception)\r
GCC_ASM_EXPORT(enter_monitor_mode)\r
GCC_ASM_EXPORT(copy_cpsr_into_spsr)\r
+GCC_ASM_EXPORT(set_non_secure_mode)\r
\r
ASM_PFX(monitor_vector_table):\r
ldr pc, dead\r
msr spsr_cxsf, r0\r
bx lr\r
\r
+# Set the Non Secure Mode\r
+ASM_PFX(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