1.5.5 Use of the __user_libspace static data area by the C libraries

The __user_libspace static data area holds the static data for the C libraries. The C libraries use the __user_libspace area to store a number of different types of data.

This is a block of 96 bytes of zero-initialized data, supplied by the C library. It is also used as a temporary stack during C library initialization.

The default ARM® C libraries use the __user_libspace area to hold:

  • errno, used by any function that is capable of setting errno. By default, __rt_errno_addr() returns a pointer to errno.
  • The Floating-Point (FP) status word for software floating-point (exception flags, rounding mode). It is unused in hardware floating-point. By default, __rt_fp_status_addr() returns a pointer to the FP status word.
  • A pointer to the base of the heap (that is, the __Heap_Descriptor), used by all the malloc-related functions.
  • The current locale settings, used by functions such as setlocale(), but also used by all other library functions that depend on them. For example, the ctype.h functions have to access the LC_CTYPE setting.

The C++ libraries use the __user_libspace area to hold:

  • The new_handler field and ddtor_pointer:
    • The new_handler field keeps track of the value passed to std::set_new_handler().
    • The ddtor_pointer, that points to a list of destructions to be performed on program exit. For example, objects constructed outside function scope exist for the duration of the program, but require destruction on program exit. The ddtor_pointer is used by __cxa_atexit() and __aeabi_atexit().
  • C++ exception handling information for functions such as std::set_terminate() and std::set_unexpected().


How the C and C++ libraries use the __user_libspace area might change in future releases.
Non-ConfidentialPDF file icon PDF versionARM DUI0475M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.