diff options
Diffstat (limited to 'libgloss/arm/crt0.S')
-rw-r--r-- | libgloss/arm/crt0.S | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 748985070..101041e04 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 |