Ulrich Drepper关于线程本地存储的论文概述了几种不同cpu架构的TLS ABI,但我发现它不足以作为实现TLS的基础,原因有两个:
例如,i386唯一的实际ABI要求是:
%gs:0 指向指向自身的指针.___tls_get_addr并且__tls_get_addr函数必须以正确的语义存在,以便查找任意TLS段.特别是,DTV的存在或布局不是 ABI的一部分,也不是主程序之外的TLS段的排序/布局.
似乎任何使用"TLS变体II"的拱门都具有大致上述ABI要求.但我完全不了解"TLS变体I"的要求,而且从阅读来源(在uClibc和glibc中)看来,甚至可能存在"变体I"的几种变体.
有没有更好的文件我应该看一下,或者熟悉TLS工作的人能向我解释ABI的要求吗?