我希望在某个指令之前插入一个函数,但该函数调用是在另一个文件中定义的。我尝试了:
IRBuilder<> Builder(pi);
CallInst *callOne = Builder.CreateCall(func_ins, "foo");
其中func_ins
是Function*
(或者更一般的Value*
),而foo
是调用函数的变量名前缀。
由于这个函数是在另一个文件中定义的,我不知道指针func_ins
应该指向哪里,所以我把它设置为NULL,但是没有起作用。
有人能给我一些提示,如何解决这个问题吗?
还有一个问题是,我是否可以使用WriteBitcodeToFile
将具有外部函数调用的插装代码转储到文件中,因为我想知道在执行模块检查时,它是否会报告Referencing function in another module
或Broken Module
?
FunctionType *FT = FunctionType::get(Type::getInt1Ty(getGlobalContext()), false); Value* func_ins = Function::Create(FT, Function::ExternalLinkage, "ExternalFunc", Mod);
剩余的构建器部分与问题中相同。 - Min GaoFunctionType::get
方法,有一个名为ArrayRef<Type *>
的参数,我猜测它是用于传递参数的。如果我想要传递三个参数(比如int、float和用户自定义结构体),我该怎么做呢? - Min Gaostd::vector
中创建。 - Oak