.globl asm_switch_context
asm_switch_context:
mrs r2, cpsr /* Save status. */
+
stmfd sp!, {r2, r4-r11, lr} /* Save registers. */
str sp, [r1] /* Save old stack pointer. */
msr cpsr, r2 /* restore flags reg. */
mov pc, lr
+
+
+/* proc_entry trampoline needed because ARM does not pop return addresses
+from the stack, but uses lr instead.*/
+.globl asm_proc_entry
+asm_proc_entry:
+ mov lr, pc
+ /* In r11 we have the real process entry point as set up by CPU_CREATE_NEW_STACK */
+ bx r11
+ bl proc_exit
+