我想在某个指令之前插入一个函数,但函数调用是在另一个文件中定义的。我试着
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
,同时执行模块检查?
只能从同一个Module
调用一个函数,不能使用NULL
作为被调用方。
如果函数在另一个模块中定义,你需要首先在你想要调用的模块中声明它,然后使用声明进行调用。
要声明它,在新模块中创建一个相同的函数(通过function:: create),只是不给它分配一个主体。