2.2.3. __user_libspace 静态数据区

__user_libspace 静态数据区保存 C 库的静态数据。 这是一个由 C 库提供的零初始化数据块(96 个字节)。 在 C 库初始化期间,还会将其用作临时堆栈。

缺省 ARM C 库使用 __user_libspace 区保存以下内容:

C++ 库使用 __user_libspace 区保存以下内容:

有关 __aeabi_atexit()std::set_terminate()std::set_unexpected() 的详细信息,请参阅以下规范:CPPABI《ARM 体系结构的异常处理 ABI》

Note

在将来的版本中,C 和 C++ 库使用 __user_libspace 区的方式可能会发生变化。

确定 __user_libspace 的地址

以下两个包装函数用于返回 __user_libspace 静态数据区的小节:

__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 0349AC
Non-Confidential