2.2.3. __user_libspace スタティックデータ領域

__user_libspace スタティックデータ領域は、C ライブラリのスタティックデータを保持する領域です。 この領域は、ゼロで初期化されたデータ内の 96 バイトのブロックで、C ライブラリによって提供されます。 また、C ライブラリの初期化時に一時的なスタックとしても使用されます。

デフォルトの ARM C ライブラリは、以下のデータの保持に __user_libspace 領域を使用します。

C++ ライブラリは、以下のデータの保持に __user_libspace 領域を使用します。

__aeabi_atexit()std::set_terminate()、および std::set_unexpected() の詳細については、『CPPABI』および『Exception Handling ABI for the ARM Architecture』仕様書を参照して下さい。

Note

C および C++ ライブラリによる __user_libspace 領域の使用形態は、今後のリリースで変更される可能性があります。

__user_libspace のアドレシング

__user_libspace スタティックデータ領域のサブセクションを返すためのラッパ関数が 2 つ用意されています。

__user_perproc_libspace()

プロセス全体に対してグローバルなデータを保存する 96 バイトを指すポインタを返します。このデータは、すべてのスレッド間で共有されます。

__user_perthread_libspace()

特定のスレッドのローカルデータを保存する、96 バイトのデータ領域のポインタを返します。 この場合、__user_perthread_libspace() は、この関数を呼び出したスレッドに応じて異なるアドレスを返します。

__user_libspace の再実装

__user_libspace() 関数は通常、再定義する必要はありません。 ただし、オペレーティングシステムまたはプロセス切り替え処理を記述する場合は、この関数を再実装する必要があります。 詳細については、スタティックデータアクセスのカスタマイズを参照して下さい。

この関数を再実装する RVCT にシングルスレッドプロセスを移植する場合は、コードを変更することなく移植できます。 ただし、RVCT を使用してマルチスレッドアプリケーションを記述する場合は、動作の変化に注意する必要があります。

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0349AJ
Non-Confidential