windows下llvm的Thread-local-Storage(TLS)的问题

来源:互联网 发布:c语言的数据类型定义 编辑:程序博客网 时间:2024/05/13 09:07


在csdn的第一篇

 

目前llvm版本(3.6.0)的新JIT引擎MCJIT还不支持的TLS,而且开发组在3.6版本开始把旧jit移除了,所以需要TLS,选择3.4.3版本的旧JIT,用3.6的洗洗睡吧……

 

windows下,就算使用了3.4版本,MSVC依旧不支持llvmTLS,所以用VS的洗洗睡吧……

 

切换到GCC。注意llvmtlswindows下仍然有许多限制,不可以使用ExternalLinkage声明全局TLS变量,而且不可以在execution_engine->addGlobalMappingTLS变量添加Mapping,全局TLS变量的Initializer是无效的。。。。。

 

目前探索到的可以正常运行的使用TLS的方法:

GlobalVariable*bsp=newGlobalVariable(*module,Type::getInt32PtrTy(context),true,GlobalValue::InternalLinkage,(Constant*)ConstantPointerNull::get(Type::getInt32PtrTy(context)),"bsp",0,GlobalVariable::GeneralDynamicTLSModel);

 

声明一个全局TLS变量,这里设他的类型为Int32Ptr

 

然后用irbuilder添加一个函数,设置这个变量指向的地址,完成初始化(不同的线程分别设置不同的地址)

0 0