设置自定义线程本地存储

问题描述 投票:0回答:1

对于我的一些与研究相关的项目,我正在尝试在创建新线程之后设置第二个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的任何建议,都非常受欢迎!

c linux elf glibc thread-local-storage
1个回答
0
投票

[如果要在x86-64上使用第二个TLS空间,则需要使用具有%gs段基础的TLS,而不要像系统其余部分一样使用%fs。如果这样做,则可以像管理其他任何内存一样管理线程本地内存,而无需与glibc协调。这是Wine内部所做的。

© www.soinside.com 2019 - 2024. All rights reserved.