对于我的一些与研究相关的项目,我正在尝试在创建新线程之后设置第二个TLS。
我想我能够在pthread
库中找到负责设置TLS的代码。例如,我感兴趣的一个功能是:_dl_allocate_tls ()
中的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的任何建议,都非常受欢迎!
[如果要在x86-64上使用第二个TLS空间,则需要使用具有%gs
段基础的TLS,而不要像系统其余部分一样使用%fs
。如果这样做,则可以像管理其他任何内存一样管理线程本地内存,而无需与glibc协调。这是Wine内部所做的。