我需要在我的 中插入IR
调用 pthread_create 的指令LoopPass
,因此我需要将实际函数作为pthread_create
应该在新线程上调用的参数传递。
目前我已将要在新线程上运行的函数定义为
Function *worker_func = Function::Create(funcType,
GlobalValue::ExternalLinkage,
"worker_func",
CurrentModule);
我得到了pthread_create
以下指针:
Function *func_pthread_create = dyn_cast<Function>(
TheModule->getOrInsertFunction("pthread_create", pthreadCreateTy));
我需要传递一个数组Type*
作为参数,pthread_create
如下所示。
Value* pthread_create_call = builder.CreateCall(
func_pthread_create, args, "pthread_create");
参数为:
Value* args[4];
args[0] = pthread_t_ld
args[1] = llvm::Constant::getNullValue(llvm::Type::getInt8Ty(getGlobalContext())->getPointerTo());
args[2] = ??? // supposed to be the pointer to worker_func`
args[3] = llvm::Constant::getNullValue(llvm::Type::getInt8Ty(getGlobalContext())->getPointerTo());
那么我怎样才能得到这个worker_func
函数的指针来传递pthread_create
呢?