* arm/crt0.s: Support 0 heap base response from HeapInfo syscall.
This commit is contained in:
		| @@ -1,3 +1,7 @@ | |||||||
|  | 2011-09-29  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com> | ||||||
|  |  | ||||||
|  | 	* arm/crt0.s: Support 0 heap base response from HeapInfo syscall. | ||||||
|  |  | ||||||
| 2011-09-29  Bin Cheng  <bin.cheng@arm.com> | 2011-09-29  Bin Cheng  <bin.cheng@arm.com> | ||||||
|  |  | ||||||
| 	* arm/arm.h (HAVE_CALL_INDIRECT): Define. | 	* arm/arm.h (HAVE_CALL_INDIRECT): Define. | ||||||
|   | |||||||
| @@ -86,6 +86,17 @@ | |||||||
| 	AngelSWIAsm	AngelSWI_ARM | 	AngelSWIAsm	AngelSWI_ARM | ||||||
| #endif | #endif | ||||||
| 	ldr	r0, .LC0	/*  point at values read */ | 	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	r1, [r0, #8] | ||||||
| 	ldr	r2, [r0, #12] | 	ldr	r2, [r0, #12] | ||||||
| 	/*  We skip setting sp/sl if 0 returned from semihosting.  | 	/*  We skip setting sp/sl if 0 returned from semihosting.  | ||||||
| @@ -437,6 +448,8 @@ change_back: | |||||||
| .LC30: | .LC30: | ||||||
| 	.word	CommandLine | 	.word	CommandLine | ||||||
| 	.word	255 | 	.word	255 | ||||||
|  | .LC31: | ||||||
|  | 	.word	__end__ | ||||||
|  |  | ||||||
| /*  Workspace for Angel calls.  */ | /*  Workspace for Angel calls.  */ | ||||||
| 	.data | 	.data | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user