我正在学习TLS(线程本地存储)在Linux系统上的实现。 ELF Handling for Thread-Local Storage文档解释了如何将程序对线程本地变量的需求编码到ELF二进制文件中,以及“运行时”应该如何处理这些二进制文件。
然而,我不确定在实践中设置TLS区域的“运行时”是Linux内核(及其用于加载ELF二进制文件的代码)还是libc中的一些初始化代码。 有人能简要解释一下吗?
(背景:我正在尝试静态链接并运行一个应用程序,但它在启动时会出现段错误。 在gdb中,我可以看到libc的一些初始化代码正在导致段错误。 它正在尝试使用相对于GS的地址读取静态变量,但GS为零。)
然而,我不确定在实践中设置TLS区域的“运行时”是Linux内核(及其用于加载ELF二进制文件的代码)还是libc中的一些初始化代码。 有人能简要解释一下吗?
(背景:我正在尝试静态链接并运行一个应用程序,但它在启动时会出现段错误。 在gdb中,我可以看到libc的一些初始化代码正在导致段错误。 它正在尝试使用相对于GS的地址读取静态变量,但GS为零。)