【发布时间】:2020-08-27 09:10:10
【问题描述】:
对于我的一些研究相关项目,我正在尝试在创建新线程后设置第二个 TLS。
我想我能够在pthread 库中找到负责设置 TLS 的代码。例如,我感兴趣的一个函数是:_dl_allocate_tls () from here。
所以理想情况下,我想写一些类似的东西:
#include <elf/dl-tls.c>
#include <sys/syscall.h>
int main(int argc, char** argv) {
void* my_new_tls = _dl_allocate_tls();
syscall(SYS_arch_prctl, ARCH_SET_FS, my_new_tls);
}
在 Ubuntu 上安装 libc6-dev 不会让我访问上述文件/标题/代码。关于如何调用上述函数的任何想法?
此外,我们非常欢迎任何有关如何以更简单、更正确的方式安装自定义 TLS 的建议!
【问题讨论】:
-
为什么要使用 glibc 的?为什么不自己分配内存(例如
mmap)? -
我不介意如何分配内存。我的主要问题是 TLS 需要如何设置我不熟悉的各种结构和默认值。
-
您似乎有一个xyproblem.info。如果您成功安装“辅助”TLS,依赖于“主”TLS 的东西将停止工作,您将崩溃。
-
@EmployedRussian 感谢您的建议,但实际上情况并非如此,因为加载程序本身可以在没有 TLS 的情况下设置 TLS。我正在尝试做与加载程序类似的事情,这就是为什么我正在寻找访问
libc中的代码。
标签: c linux elf glibc thread-local-storage