Datasheet

The C and C++ Libraries
ARM DUI 0067D Copyright © 1999-2001 ARM Limited. All rights reserved. 4-69
4.9.4 __user_initial_stackheap()
Returns the locations of the initial stack and heap.
Syntax
__value_in_regs struct __initial_stackheap__user_initial_stackheap (unsigned
R0, unsigned SP, unsigned R2, unsigned SL)
Implementation
Note
If you are using scatter-loading files with the linker, you must reimplement this
function. The default implementation uses the value of the symbol
Image$$ZI$$Limit
.
This symbol is not defined if the linker uses a scatter-loading file (
-scatter
command-line option).
If this function is redefined, it must:
use no more than 96 bytes of stack
not corrupt registers other than r12 (ip)
return in r0-r3 respectively the heap base, stack base, heap limit, and stack limit
maintain 8-byte alignment of the heap.
For the default single region model, the values in r2 and r3 are ignored and all memory
between r0 and r1 is available for the heap. For a two region model, the heap limit is set
by r2 and the stack limit is set by r3.
The values of sp and sl inherited from the environment are passed as arguments in r1
and r3, respectively. The default implementation of
__user_initial_stackheap()
that
uses the semihosting SWI SYS_HEAPINFO is given by the library in module
sys_stackheap.o
.
To create a version of
__user_initial_stack_heap()
that inherits sp and sl from the
execution environment and does not have a heap, set r0 and r2 to the value of r3 and
return.
The definition of
__initial_stackheap
in
rt_misc.h
is:
struct __initial_stackheap{
unsigned heap_base, stack_base, heap_limit, stack_limit;}
See also the re-implementation of this function in
\Examples\Embedded\embed\retarget.c
.