大佬教程收集整理的这篇文章主要介绍了在Linux上,是由内核还是由libc(或其他语言运行库)设置的TLS?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是,我不清楚在实践中,设置TLS区域的“运行时”是Linux内核(及其加载ELF二进制文件的代码)还是libc中的一些初始化代码.有人能简单解释一下吗
(背景:我正在尝试静态链接并运行一个应用程序,但它在启动时会出现段错误.在gdb中,我可以看到segfaulting代码是来自libc的一些初始化代码.它试图使用相对于的地址读取静态变量GS,但GS为零.)
例如,glibc在libc.a中有__libc_setup_tls和_dl_tls_setup(以及相关的东西),如果你通过gcc -static链接,它将被添加到程序的初始化代码中. (对于动态链接程序,_dl _…函数是ELF动态链接器加载器ld-linux.so的一部分,它不用于运行静态链接程序.)
因此,静态链接可执行文件中的正确TLS初始化是C库(提供代码)与工具链(必须了解如何正确链接所有必需的启动代码)之间的协作的结果.
内核参与TLS初始化很少. (基本上,它只需要确保.cata部分可用于libc进行初始化.)有关详细信息,请参阅ELF file TLS and LOAD program sections.
以上是大佬教程为你收集整理的在Linux上,是由内核还是由libc(或其他语言运行库)设置的TLS?全部内容,希望文章能够帮你解决在Linux上,是由内核还是由libc(或其他语言运行库)设置的TLS?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。