summaryrefslogtreecommitdiff
path: root/testing/examples/ledtest-imx31pdk/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'testing/examples/ledtest-imx31pdk/crt0.S')
-rw-r--r--testing/examples/ledtest-imx31pdk/crt0.S47
1 files changed, 47 insertions, 0 deletions
diff --git a/testing/examples/ledtest-imx31pdk/crt0.S b/testing/examples/ledtest-imx31pdk/crt0.S
new file mode 100644
index 00000000..6c15be21
--- /dev/null
+++ b/testing/examples/ledtest-imx31pdk/crt0.S
@@ -0,0 +1,47 @@
+/* Sample initialization file */
+
+ .extern main
+ .extern exit
+
+/* .text is used instead of .section .text so it works with arm-aout too. */
+ .text
+ .code 32
+ .align 0
+
+ .global _mainCRTStartup
+ .global _start
+ .global start
+start:
+_start:
+_mainCRTStartup:
+
+/* Start by setting up a stack */
+ /* Set up the stack pointer to end of bss */
+ ldr r3, .LC2
+ mov sp, r3
+
+ sub sl, sp, #512 /* Still assumes 512 bytes below sl */
+
+ mov a2, #0 /* Second arg: fill value */
+ mov fp, a2 /* Null frame pointer */
+ mov r7, a2 /* Null frame pointer for Thumb */
+
+ ldr a1, .LC1 /* First arg: start of memory block */
+ ldr a3, .LC2 /* Second arg: end of memory block */
+ sub a3, a3, a1 /* Third arg: length of block */
+
+ mov r0, #0 /* no arguments */
+ mov r1, #0 /* no argv either */
+
+ bl main
+ bl exit /* Should not return */
+
+ /* For Thumb, constants must be after the code since only
+ positive offsets are supported for PC relative addresses. */
+
+ .align 0
+.LC1:
+ .word __bss_start__
+.LC2:
+ .word __bss_end__
+