You copied the Doc URL to your clipboard.

Arm Compiler Arm C and C++ Libraries and Floating-Point Support User Guide : Legacy support for __user_initial_stackheap()

Legacy support for __user_initial_stackheap()

Defined in rt_misc.h, __user_initial_stackheap() is supported for backwards compatibility with earlier versions of the Arm® C and C++ libraries. However Arm recommends not using this option if possible.

Note

Arm recommends that you use __user_setup_stackheap() instead of __user_initial_stackheap().

The differences between __user_initial_stackheap() and __user_setup_stackheap() are:

  • __user_initial_stackheap() receives the stack pointer (containing the same value it had on entry to __main()) in r1, and is expected to return the new stack base in r1.

    __user_setup_stackheap() receives the stack pointer in sp, and returns the stack base in sp.

  • __user_initial_stackheap() is provided with a small temporary stack to run on. This temporary stack enables __user_initial_stackheap() to be implemented in C, providing that it uses no more than 88 bytes of stack space.

    __user_setup_stackheap() has no temporary stack and cannot usually be implemented in C.

Using __user_setup_stackheap() instead of __user_initial_stackheap() reduces code size, because __user_setup_stackheap() has no requirement for a temporary stack.

Exceptions

When you must create the heap and stack in C code rather than in assembly code, you cannot use the __user_setup_stackheap() function. Therefore, you must use the __user_initial_stackheap() function instead.

If your implementation is sufficiently complex that it warrants the use of a temporary stack when setting up the initial heap and stack, use either:

  • __user_setup_stackheap() and manually set up the temporary stack yourself.
  • __user_initial_stackheap(), which sets up the temporary stack for you.
Was this page helpful? Yes No