外部llvm GlobalVariable与TLS的可能错误?

外部llvm GlobalVariable与TLS的可能错误?,llvm,jit,thread-local-storage,Llvm,Jit,Thread Local Storage,我试图在LLVM MSVC,Windows中创建一个线程局部全局变量。 通常,外部全局变量可以这样初始化: 执行引擎->添加全局映射模块->获取全局变量BSP和somevalue; 但当我创建TLS GlobalVariable设置时,ThreadLocalModel=GlobalVariable::LocalDynamiclSmodel ,addGlobalMapping似乎不起作用。 以下是一个例子: 初始化ActivityTarget; 初始化ActivateTasmPrinter; In

我试图在LLVM MSVC,Windows中创建一个线程局部全局变量。 通常,外部全局变量可以这样初始化:

执行引擎->添加全局映射模块->获取全局变量BSP和somevalue; 但当我创建TLS GlobalVariable设置时,ThreadLocalModel=GlobalVariable::LocalDynamiclSmodel ,addGlobalMapping似乎不起作用。 以下是一个例子:

初始化ActivityTarget; 初始化ActivateTasmPrinter; InitializeEnableTargetAsmParser; llvm::LLVMContext&context=llvm::getGlobalContext; llvm::Module*Module=new llvm::Moduletop,上下文; IrbuilderBuilderContext; GlobalVariable*bsp=新的GlobalVariable*模块,类型::getInt32Tycontext,false,GlobalValue::ExternalLinkage,0,bsp,0,GlobalVariable::LocalDynamicTSModel; llvm::FunctionType*FunctionType= llvm::FunctionType::getbuilder.getInt32Ty,false; llvm::函数*mainFunc= llvm::Function::CreatefuncType,llvm::Function::ExternalLinkage,main,module; llvm::BasicBlock*entry=llvm::BasicBlock::Createcontext,entrypoint,mainFunc; builder.SetInsertPointentry; //builder.CreateStoreCont32123,bsp; builder.CreateRetbuilder.CreateLoadbsp; 模块->转储; 执行引擎*执行引擎; 龙欧=1; TheExecutionEngine=EngineBuildermodule.create; 模块->getGlobalVariablebsp->转储; 执行引擎->添加全局映射模块->获取全局变量BSP,&ou; typedef int*PF; PF fun=PFTheExecutionEngine->GetPointerOfUnctionMainFunc; printf%d%d\n,ou,fun; 系统暂停; 在这里,我在llvm中创建了一个函数main,它返回全局变量bsp的值

在JIT LLVM模块之前,我在C++中使用了一个变量:长OU=1;并将LLVM变量BSP映射到C++变量OUTHEXECUTRON引擎-> AddiGualMappMultMeult:GETGULALALICABABLE BSP,以及O.;p> 最后,我jit函数并运行它。fun应返回值1,但它返回一个随机数

我已经在llvm 3.4.2上使用旧的JIT而不是MCJIT尝试了我的代码 我认为LLVM全局变量没有成功地映射到C++变量。

也许我用错误的方式使用线程局部全局变量,或者它是LLVM bug?< /P>换句话说,如何正确地将LLVM线程局部变量映射到C++变量。