1.15 C ライブラリによる __user_libspace スタティックデータ領域の使用

__user_libspace スタティックデータ領域は、C ライブラリのスタティックデータを保持する領域です。C ライブラリは __user_libspace 領域を使用して多数の異なる種類のデータを保存します。

この領域は、ゼロで初期化されたデータ内の 96 バイトのブロックで、C ライブラリによって提供されます。また、C ライブラリの初期化時に一時的なスタックとしても使用されます。
デフォルトの ARM C ライブラリは、以下のデータの保持に __user_libspace 領域を使用します。
  • errno を設定できる関数によって使用される errno__rt_errno_addr() はデフォルトで、errno を指すポインタを返します。
  • ソフトウェア浮動小数点の浮動小数点(FP)ステータスワード(例外フラグ、丸めモード)。ハードウェア浮動小数点では使用されません。__rt_fp_status_addr() はデフォルトで、FP ステータスワードを指すポインタを返します。
  • すべての malloc 関連関数によって使用される、ヒープのベースを指すポインタ(すなわち、__Heap_Descriptor)。
  • setlocale() などの関数や、それらに依存するその他のすべてのライブラリ関数によって使用される現在のロケール設定。例えば、ctype.h 関数は、LC_CTYPE 設定にアクセスする必要があります。
C++ ライブラリは、以下のデータの保持に __user_libspace 領域を使用します。
  • new_handler フィールドおよび ddtor_pointer
    • new_handler フィールドは、std::set_new_handler() に渡された値を追跡します。
    • ddtor_pointer は、プログラム終了時に実行されるデストラクションのリストを指します。例えば、関数スコープの外側で構築されたオブジェクトは、プログラム実行中は存在していますが、プログラム終了時に破棄する必要があります。ddtor_pointer は、__cxa_atexit() および __aeabi_atexit() により使用されます。
  • std::set_terminate()std::set_unexpected() などの関数の C++ 例外処理情報

C および C++ ライブラリによる __user_libspace 領域の使用形態は、今後のリリースで変更される可能性があります。
関連する概念
1.16 __user_libspace スタティックデータ領域のサブセクションにアクセスする C ライブラリ関数
関連情報
『ARM アーキテクチャ用 C++ ABI』の __aeabi_atexit()
『ARM アーキテクチャ用例外処理 ABI』の std::set_terminate() と std::set_unexpected()
非機密扱いPDF file icon PDF 版ARM DUI0475KJ
Copyright © 2010-2014 ARM.All rights reserved.