Libraries and Floating Point Support Guide

Technical Support

On-Line Manuals

Libraries and Floating Point Support Guide

Conventions and feedback The ARM C and C++ libraries Mandatory linkage with the C library C and C++ runtime libraries C and C++ library features Library heap usage requirements of the ARM C and C Compliance with the Application Binary Interface ( Increasing portability of object files to other CL ARM C and C++ library directory structure Selection of ARM C and C++ library variants based Thumb C libraries C++ and C libraries and the std namespace ARM C libraries and multithreading ARM C libraries and reentrant functions ARM C libraries and thread-safe functions Use of static data in the C libraries Use of the __user_libspace static data area by the C library functions to access subsections of the _ Re-implementation of legacy function __user_libspa Management of locks in multithreaded applications How to ensure re-implemented mutex functions are c Using the ARM C library in a multithreaded environ Thread safety in the ARM C library Thread safety in the ARM C++ library The floating-point status word in a multithreaded Using the C library with an application Using the C and C++ libraries with an application Using $Sub$$ to mix semihosted and nonsemihosted I Using the libraries in a nonsemihosting environmen C++ exceptions in a non-semihosting environment Direct semihosting C library function dependencies Indirect semihosting C library function dependenci C library API definitions for targeting a differen Building an application without the C library Creating an application as bare machine C without Integer and floating-point compiler functions and Bare machine integer C Bare machine C with floating-point processing Customized C library startup code and access to C Program design when exploiting the C library Using low-level functions when exploiting the C li Using high-level functions when exploiting the C l Using malloc() when exploiting the C library Tailoring the C library to a new execution environ How C and C++ programs use the library functions Initialization of the execution environment and ex C++ initialization, construction and destruction Legacy support for C$$pi_ctorvec instead of .init_ Exceptions system initialization Emergency buffer memory for exceptions Library functions called from main() Program exit and the assert macro Assembler macros that tailor locale functions in t Link time selection of the locale subsystem in the ISO8859-1 implementation Shift-JIS and UTF-8 implementation Runtime selection of the locale subsystem in the C Definition of locale data blocks in the C library LC_CTYPE data block LC_COLLATE data block LC_MONETARY data block LC_NUMERIC data block LC_TIME data block Modification of C library functions for error sign Modification of memory management functions in the Avoiding the heap and heap-using library functions C library support for memory allocation functions Heap1, standard heap implementation Heap2, alternative heap implementation Using a heap implementation from bare machine C Stack pointer initialization and heap bounds Defining __initial_sp, __heap_base and __heap_limi Extending heap size at runtime Legacy support for __user_initial_stackheap() Tailoring input/output functions in the C and C++ Target dependencies on low-level functions in the The C library printf family of functions The C library scanf family of functions Redefining low-level library functions to enable d The C library functions fread(), fgets() and gets( Re-implementing __backspace() in the C library Re-implementing __backspacewc() in the C library Redefining target-dependent system I/O functions i Tailoring non-input/output C library functions Real-time integer division in the ARM libraries Selecting real-time division in the ARM libraries How the ARM C library fulfills ISO C specification mathlib error handling ISO-compliant implementation of signals supported ISO-compliant C library input/output characteristi Standard C++ library implementation definition C library functions and extensions Persistence of C and C++ library names across rele Link time selection of C and C++ libraries Managing projects that have explicit C or C++ libr Compiler generated and library-resident helper fun C and C++ library naming conventions Using macro__ARM_WCHAR_NO_IO to disable FILE decla The ARM C micro-library Floating-point support

Building an application without the C library

Building an application without the C library

Creating an application that has a main() function causes the C library initialization functions to be included as part of __rt_lib_init.

If your application does not have a main() function, the C library is not initialized and the following functions are not available in your application:

  • low-level stdio functions that have the prefix _sys_

  • signal-handling functions, signal() and raise() in signal.h

  • other functions, such as atexit().

Table 5 shows header files, and the functions they contain, that are available with an uninitialized library. Some otherwise unavailable functions can be used if the library functions they depend on are re-implemented.

(ARM Linux header files are not included in this table because their use serves no purpose with an uninitialized library.)

Table 5. Standalone C library functions

FunctionDescription
alloca.h

Functions in this file work without any library initialization or function re-implementation. You must know how to build an application with the C library to use this header file.

assert.h

Functions listed in this file require high-level stdio, __rt_raise(), and _sys_exit(). You must be familiar with tailoring error signaling, error handling, and program exit to use this header file.

ctype.h

Functions listed in this file require the locale functions.

errno.h

Functions in this file work without the requirement for any library initialization or function re-implementation.

fenv.h

Functions in this file work without the requirement for any library initialization and only require the re-implementation of __rt_raise().

float.h

This file does not contain any code. The definitions in the file do not require library initialization or function re-implementation.

inttypes.h

Functions listed in this file require the locale functions.

limits.h

Functions in this file work without the requirement for any library initialization or function re-implementation.

locale.h

Call setlocale() before calling any function that uses locale functions. For example:

setlocale(LC_ALL, "C")

See the contents of locale.h for more information on the following functions and data structures:

  • setlocale() selects the appropriate locale as specified by the category and locale arguments.

  • lconv is the structure used by locale functions for formatting numeric quantities according to the rules of the current locale.

  • localeconv() creates an lconv structure and returns a pointer to it.

  • _get_lconv() fills the lconv structure pointed to by the parameter. This ISO extension removes the requirement for static data within the library.

locale.h also contains constant declarations used with locale functions.

math.h

For functions in this file to work, you must first call _fp_init() and re-implement __rt_raise().

setjmp.h

Functions in this file work without any library initialization or function re-implementation.

signal.h

Functions listed in this file are not available without library initialization. You must know how to build an application with the C library to use this header file.

__rt_raise() can be re-implemented for error and exit handling. You must be familiar with tailoring error signaling, error handling, and program exit.

stdarg.h

Functions listed in this file work without any library initialization or function re-implementation.

stddef.h

This file does not contain any code. The definitions in the file do not require library initialization or function re-implementation.

stdint.h

This file does not contain any code. The definitions in the file do not require library initialization or function re-implementation.

stdio.h

The following dependencies or limitations apply to these functions:

  • The high-level functions such as printf(), scanf(), puts(), fgets(), fread(), fwrite(), and perror() depend on lower-level stdio functions fgetc(), fputc(), and __backspace(). You must re-implement these lower-level functions when using the standalone C library.

    However, you cannot re-implement the _sys_ prefixed functions (for example, _sys_read()) when using the standalone C library because they require library initialization.

    You must be familiar with tailoring the input/output functions in the C and C++ libraries.

  • The printf() and scanf() family of functions require locale.

  • The remove() and rename() functions are system-specific and probably not usable in your application.

stdlib.h

Most functions in this file work without any library initialization or function re-implementation. The following functions depend on other functions being instantiated correctly:

  • ato*() requires locale

  • strto*() requires locale

  • malloc(), calloc(), realloc(), and free() require heap functions

  • atexit() is not available when building an application without the C library.

string.h

Functions in this file work without any library initialization, with the exception of strcoll() and strxfrm(), that require locale.

time.h

mktime() and localtime() can be used immediately

time() and clock() are system-specific and are probably not usable unless re-implemented

asctime(), ctime(), and strftime() require locale.

wchar.h

Wide character library functions added to ISO C by Normative Addendum 1 in 1994.

  • Support for wide-character output and format strings, swprintf(), vswprintf(), swscanf(), and vswscanf()

  • All the conversion functions (for example, btowc, wctob, mbrtowc, and wcrtomb) require locale

  • wcscoll() and wcsxfrm() require locale.

wctype.h

Wide character library functions added to ISO C by Normative Addendum 1 in 1994. This requires locale.


Copyright © 2007-2008, 2011-2012 ARM. All rights reserved.ARM DUI 0378D
Non-ConfidentialID062912