aboutsummaryrefslogtreecommitdiff
path: root/libgloss/arm/crt0.S
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/arm/crt0.S')
-rw-r--r--libgloss/arm/crt0.S13
1 files changed, 13 insertions, 0 deletions
diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S
index 7489850..101041e 100644
--- a/libgloss/arm/crt0.S
+++ b/libgloss/arm/crt0.S
@@ -86,6 +86,17 @@
AngelSWIAsm AngelSWI_ARM
#endif
ldr r0, .LC0 /* point at values read */
+
+ ldr r1, [r0, #0]
+ cmp r1, #0
+ bne .LC32
+ /* If the heap base value [r0, #0] is 0 then the heap base is actually
+ at the end of program data (i.e. __end__). See:
+ http://infocenter.arm.com/help/topic/com.arm.doc.dui0471-/Bacbefaa.html
+ for more information. */
+ ldr r1, .LC31
+ str r1, [r0, #0]
+.LC32:
ldr r1, [r0, #8]
ldr r2, [r0, #12]
/* We skip setting sp/sl if 0 returned from semihosting.
@@ -437,6 +448,8 @@ change_back:
.LC30:
.word CommandLine
.word 255
+.LC31:
+ .word __end__
/* Workspace for Angel calls. */
.data