LLVM插入从另一个文件定义的函数调用

时间:2014-06-20 16:10:11

标签: llvm llvm-ir

我想在某个指令之前插入一个函数,但函数调用是在另一个文件中定义的。我试过了

IRBuilder<> Builder(pi);
CallInst *callOne = Builder.CreateCall(func_ins, "foo");

其中func_insfunc*(or Value* to be more general)foo是已分配的调用函数的变量名前缀。 由于此函数在另一个文件中定义,我不知道指针func_ins应该指向哪里,所以我只是将它设置为 NULL ,但它不起作用。

有人能给我一些关于如何解决这个问题的提示吗?

还有一个问题是我可以使用WriteBitcodeToFile转储已对文件进行外部函数调用的已检测代码,因为我想知道它可能在执行模块检查时报告Referencing function in another moduleBroken Module

1 个答案:

答案 0 :(得分:6)

您只能从同一个Module调用一个函数,并且您不能使用NULL作为被调用方。

如果在另一个模块中定义了该函数,则需要先在要调用的模块中声明,然后使用声明进行调用。

要声明它,在新模块中创建一个相同的功能(通过Function::Create)并且不要为它分配一个正文。