aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2002-08-10 21:19:58 +0000
committerH. Peter Anvin <hpa@zytor.com>2002-08-10 21:19:58 +0000
commita5fd632b6e7bb56ae765969bba2284564930bf74 (patch)
treeea8f108350935509495fa1fb3384c41f99009ebe
parentbfaec8719e6de79949b8ba5b518f94d350d24435 (diff)
downloadklibc-a5fd632b6e7bb56ae765969bba2284564930bf74.tar.gz
Handle both arm and thumb in arm/crt0.Sklibc-0.13
-rw-r--r--arch/arm/crt0.S33
-rw-r--r--klibc/arch/arm/crt0.S33
2 files changed, 58 insertions, 8 deletions
diff --git a/arch/arm/crt0.S b/arch/arm/crt0.S
index adba415cc166f..b0791e51e12c0 100644
--- a/arch/arm/crt0.S
+++ b/arch/arm/crt0.S
@@ -11,16 +11,41 @@
.text
.align 4
- .type _start,@function
+ .type _start,#function
.globl _start
-_start:
- ldr r0, [sp], #4
+
+#ifdef __thumb__
+
+/*
+ * Thumb version
+ */
+
+ .thumb_func
+_start: pop {r0}
mov r1, sp
- add r2, r1, r0, lsl #2
+ ldr r3, =environ
+ lsl r2, r0, #2
+ add r2, r1, r2
add r2, r2, #4
+ str r2, [r3, #0]
+ bl main
+ bl exit
+
+#else
+
+/*
+ * ARM version
+ */
+
+_start: ldr r0, [sp], #4
+ mov r1, sp
ldr r3, =environ
+ add r2, r1, r0, lsl #2
+ add r2, r2, #4
str r2, [r3, #0]
bl main
b exit
+#endif
+
.size _start,.-_start
diff --git a/klibc/arch/arm/crt0.S b/klibc/arch/arm/crt0.S
index adba415cc166f..b0791e51e12c0 100644
--- a/klibc/arch/arm/crt0.S
+++ b/klibc/arch/arm/crt0.S
@@ -11,16 +11,41 @@
.text
.align 4
- .type _start,@function
+ .type _start,#function
.globl _start
-_start:
- ldr r0, [sp], #4
+
+#ifdef __thumb__
+
+/*
+ * Thumb version
+ */
+
+ .thumb_func
+_start: pop {r0}
mov r1, sp
- add r2, r1, r0, lsl #2
+ ldr r3, =environ
+ lsl r2, r0, #2
+ add r2, r1, r2
add r2, r2, #4
+ str r2, [r3, #0]
+ bl main
+ bl exit
+
+#else
+
+/*
+ * ARM version
+ */
+
+_start: ldr r0, [sp], #4
+ mov r1, sp
ldr r3, =environ
+ add r2, r1, r0, lsl #2
+ add r2, r2, #4
str r2, [r3, #0]
bl main
b exit
+#endif
+
.size _start,.-_start