ELF对线程局部储存的处理
文章平均质量分 81
wuhui_gdnt
这个作者很懒,什么都没留下…
展开
-
ELF对线程局部储存的处理(3)
<br />4.2.局部动态TLS模式<br />局部动态TLS模式是常规动态TLS模式的一个优化。如果编译器认识到,这个线程局部变量的引用所在的对象与其定义所在对象相同,它可以产生遵循这个模式的代码。这包括,比如,具有文件域的线程局部变量,或被定义为保护或隐藏的变量(更多这方面的信息参考:通用ELF ABI规范)。这里我们把这些类型的变量援引为受保护的。<br />提醒一下,一个线程局部变量由模块ID及在该模块的TLS块中的偏移来定义。在确信变量定义在引用它的模块中时,其偏移在链接时刻是已知的。模翻译 2011-04-04 20:00:00 · 1329 阅读 · 0 评论 -
ELF对线程局部储存的处理(4)
<br />4.3.初始可执行TLS模式<br />如果已知被访问的变量出现在程序启动时的一个模块中,并且如果程序选择使用静态访问模式,可以使用一个限制更多的优化。后一个条件意味着,所产生的代码不会使用函数__tls_get_addr,这又意味着,推迟为以这个方式访问的TLS块分配内存,是不可能的。但对于动态加载的模块,推迟分配仍然是可能的。<br />这个优化背后的想法是,在动态链接器载入所有被执行映像(及其它一些,像由LD_PRELOAD命名的,映像)直接或间接引用的模块后,每个在这些模块的TLS块翻译 2011-04-04 20:01:00 · 1230 阅读 · 0 评论 -
ELF对线程局部储存的处理(5)
<br />4.4.局部可执行TLS模式<br />类似局部动态模式相对于常规动态模式加入的优化,优化局部动态模式得到局部可执行模式。它使用的限制性比局部动态模式还要大。它仅能用于执行映像自身的代码,并访问该执行映像本身的变量。<br />把使用限制在执行映像意味着,仅对于局部可执行模式而言,TLS块可以相对于线程指针取址。限定变量是那些定义在执行映像里的变量,这意味着总是使用第一个TLS块,这个块用于执行映像,因而对于地址计算来说,其它块的大小都不再重要。它亦意味着,当构建最终映像时,链接器知道到TC翻译 2011-04-04 20:03:00 · 991 阅读 · 0 评论 -
ELF对线程局部储存的处理(1)
<br /><br />一周之前,正在为GCC中对线程局部变量的处理而头疼不已,偶尔在文档《Using Gcc》里找到了这篇“ELFHandling For Thread-Local Storage”,它对线程局部变量的描述澄清了我的不少疑问,考虑到尚未看到中文的版本,特把它翻译了出来。当然这里的描述距离真正的代码实现还很远,不过从中已可窥探出,现代编译器、链接器确实是充满挑战、令人兴奋的软件。<br /> <br />ELF对线程局部储存的处理<br />原作者:UlrichDrepper,Red翻译 2011-04-04 19:56:00 · 5808 阅读 · 1 评论 -
ELF对线程局部储存的处理(6)
<br />5. 链接器优化<br />线程局部储存访问模式,就使用的方式而言,是分层的。最通用的模式是常规动态模式,它可以随处使用。当生成执行映像本身时,初始可执行模式可以无条件使用。如果一个共享对象不是要动态载入的,它也可以使用。这两个模式已经定义了一个层次。余下两个模式,如果定义是与引用在同一个模块中,是对更通用模式之一的特殊优化。访问模式之间的层次及转换可以图形化地显示如下[1]:<br /><br />[1]这个图一开始是由MikeWalker制作的<br /><br /><b翻译 2011-04-04 20:15:00 · 1285 阅读 · 0 评论 -
ELF对线程局部储存的处理(7)
<br />5.4.Alpha链接器优化<br />Alpha的链接器优化要比IA-32或SPARC的干净,因为对指令的次序没有限制。<br />重定位TLSGD/TLSLDM,LTERAL及LITUSE,在汇编文件中,由序号(sequence number)关联。这使得它们在目标文件中被连续发布(emit)。<br />不会发生__tls_get_addr模式的放宽,除非重定位以TLSGD,LITERAL及LITUSE_TLSGD,这个次序出现(对于TLSLDM,类似)。这用于区别TLSGD重定位不与任何翻译 2011-04-04 20:17:00 · 1763 阅读 · 0 评论 -
ELF对线程局部储存的处理(8)
<br />6. ELF新定义<br />这一节显示了,对于描述扩展ELF格式必须的,新引入的常量的实际定义。通用的扩展是:<br />#define SHF_TLS (1 <<10)<br />#define STT_TLS 6<br />#define PT_TLS 76.1.IA-64新ELF定义<br />#define R_IA64_TPREL14 0x91/* @tprel (sym+add), imm1翻译 2011-04-04 20:19:00 · 1353 阅读 · 0 评论