我想在某个指令之前插入一个函数,但函数调用是在另一个文件中定义的。我试过了
IRBuilder<> Builder(pi);
CallInst *callOne = Builder.CreateCall(func_ins, "foo");
其中func_ins
为func*(or Value* to be more general)
,foo
是已分配的调用函数的变量名前缀。
由于此函数在另一个文件中定义,我不知道指针func_ins
应该指向哪里,所以我只是将它设置为 NULL ,但它不起作用。
有人能给我一些关于如何解决这个问题的提示吗?
还有一个问题是我可以使用WriteBitcodeToFile
转储已对文件进行外部函数调用的已检测代码,因为我想知道它可能在执行模块检查时报告Referencing function in another module
或Broken Module
?
答案 0 :(得分:6)
您只能从同一个Module
调用一个函数,并且您不能使用NULL
作为被调用方。
如果在另一个模块中定义了该函数,则需要先在要调用的模块中声明,然后使用声明进行调用。
要声明它,在新模块中创建一个相同的功能(通过Function::Create)并且不要为它分配一个正文。