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

Min*_*Gao 3 llvm llvm-ir

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

IRBuilder<> Builder(pi);
CallInst *callOne = Builder.CreateCall(func_ins, "foo");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Oak*_*Oak 6

您只能从同一个函数调用一个函数Module,并且您不能将其NULL用作被调用者.

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

要声明它,在新模块中创建一个相同的函数(通过Function :: Create),并且不要为它分配一个主体.