# Starupt Code must be linked first at Address at which it expects to run.
.text
-# .arm
+ .code 32
.global _stack // top of stack
.global _startup
# Enter the C _setup_board code
- ADR LR, __main_start
LDR R0, =_setup_board
CMP R0, #0
BEQ __main_start
+ ADR LR, __main_start
+#if defined(__thumb__)
+ TST R0,#1
+ ADRNE LR, __main_start_from_thumb
+ BX R0
+ .code 16
+__main_start_from_thumb:
+ BX PC
+ NOP
+ .code 32
+#else
BX R0
+#endif
+__main_start:
-__main_start:
+ LDR R0, =main
ADR LR, __main_exit
- LDR R0, =main
+#if defined(__thumb__)
+ TST R0,#1
+ ADRNE LR, __main_exit_from_thumb
+ BX R0
+ .code 16
+__main_exit_from_thumb:
+ BX PC
+ NOP
+ .code 32
+#else
+ BX R0
+#endif
+__main_exit:
+ LDR R0, =_mem_app_start
+ CMP R0, #0
+ BEQ __main_loop
BX R0
-__main_exit: B __main_exit
+__main_loop: B __main_loop
.size _start, . - _start
.endfunc