ZHCADC4A September 2011 – March 2014
线程指针相对寻址不能用于弱引用,因为如果不定义符号,便无法生成零地址。因此,在静态可执行文件和裸机动态链接访问模型中,必须将局部动态形式用于弱引用。
在静态和裸机动态链接中,会为弱引用生成以下寻址:
MVK $TPR_S16(x), A5 ; reloc R_C6000_TPR_S16
|| CALLP __c6xabi_get_addr,B3 ; A4 has the address of x at return
C6x eabi 函数 __c6xabi_get_addr() 具有以下签名:
void * __c6xabi_get_addr(ptrdiff_t TPR_offst);
此函数接受 32 位 TPR 偏移,会返回线程局部变量的地址。TPR 偏移的特殊值 -1 用于指示弱未定义引用。这种情况下返回零。
静态链接器和动态链接器会将 TPR_S16 重定位解析为 -1,表示弱未定义引用。