diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index afea6bb46..ff129e66c 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -1,3 +1,7 @@ +2011-09-29 Matthew Gretton-Dann + + * arm/crt0.s: Support 0 heap base response from HeapInfo syscall. + 2011-09-29 Bin Cheng * arm/arm.h (HAVE_CALL_INDIRECT): Define. 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