__user_setup_stackheap() sets up and returns the locations of the initial stack and heap.
If you define this function, it is called by the C library during program start-up.
__user_setup_stackheap() is called,
the same value it had on entry to the application. If this was set
to a valid value before calling the C library initialization code,
it can be left at this value. If
sp is not valid,
change this value before using any stack and before returning.
__user_setup_stackheap() returns the:
Heap base in
r0(if the program uses the heap).
Stack base in
Heap limit in
r2(if the program uses the heap and uses two-region memory).
If this function is re-implemented, it must:
Not corrupt registers other than
Maintain eight-byte alignment of the heap by ensuring that the heap base is a multiple of eight.
To create a version of
__user_setup_stackheap() that inherits
the execution environment and does not have a heap, set
r2 to zero and
There is no limit to the size of the stack. However, if the
heap region grows into the stack,
to detect the overlapping memory and fails the new memory allocation request.
NoteAny re-implementation of
__user_setup_stackheap()must be in assembler.