Handle both arm and thumb in arm/crt0.S
diff --git a/arch/arm/crt0.S b/arch/arm/crt0.S
index adba415..b0791e5 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
+ 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
- ldr r3, =environ
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 adba415..b0791e5 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
+ 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
- ldr r3, =environ
str r2, [r3, #0]
bl main
b exit
+#endif
+
.size _start,.-_start