You copied the Doc URL to your clipboard.

C and C++ library changes between RVCT v2.2 and RVCT v3.0

The function __user_initial_stackheap() sets up and returns the locations of the initial stack and heap. In RVCT v3.x and later, ARM recommends you modify your source code to use __user_setup_stackheap() instead. __user_initial_stackheap() is still supported for backwards compatibility with earlier versions of the ARM C and C++ libraries.

If you continue to use __user_initial_stackheap(), be aware of the following changes in RVCT v3.0.

  • In RVCT v2.x and earlier, the default implementation of __user_initial_stackheap() uses the value of the symbol Image$$ZI$$Limit. This symbol is not defined if you specify a scatter file using the --scatter linker command line option. Therefore, you must re-implement __user_initial_stackheap() to set the heap and stack boundaries if you are using a scatter file, otherwise your link step fails.

    In RVCT v3.x and later, multiple implementations of __user_initial_stackheap() are provided by the ARM C library. RVCT automatically selects the correct implementation using information given in the scatter file. This means that you do not have to re-implement this function if you are using scatter files.

  • When migrating your application from RVCT v2.2 to RVCT v3.0, you might see the following linker error:

    Error L6218E: Undefined symbol main (referred from kernel.o).
    

    The linker is reporting that your application does not include a main() function. The error is generated because of the way RVCT v3.0 selects from the multiple implementations of __user_initial_stackheap(). These implementations refer to the __rt_exit() function. This is contained in kernel.o, that also contains the __rt_lib_init() function. Because the __rt_lib_init() function calls main(), this results in an undefined symbol error when main() is not present.

    If you do not provide a main() function as the entry point of your C code, the simplest solution is to implement either:

    • an empty, dummy main() function

    • a dummy implementation of __rt_exit().

    If one of these stubs is contained in a separate source file, it is usually removed by the unused section elimination feature of the linker so there is no overhead in the final linked image.

See also

Concepts
Reference

ARM® C and C++ Libraries and Floating-Point Support Reference:

Linker Reference:

Was this page helpful? Yes No