llvm - 从文件中删除一个函数

时间:2018-04-03 16:16:19

标签: llvm llvm-ir llvm-gcc llvm-3.0

我有一个文件,其中main函数调用三个测试函数,即test 1,test 2和test 3.我想创建一个传递,逐个删除每两个函数并返回调用的文件只有三个测试功能中的一个。现在,我的传球是这个身体的ModulePass:

 for(Module::iterator F= M.begin(), E = M.end(); F != E; ++F) // iterating over functions in a module
    {
            std::string function_name = F->getName();   
            if((std::find(calledFunctions.begin(), calledFunctions.end(), function_name) != calledFunctions.end())
                    && function_name != current_function ) 
            {
                F->replaceAllUsesWith(UndefValue::get(F->getType()));
                F->removeFromParent(); 
            }
    }

其中被调用的函数包含您想要的函数(例如,测试2和测试3),current_function是您在主函数中想要的函数(在这种情况下为test 1)

有人可以告诉我,我的方法是否正确?截至目前,我遇到了分段错误。

1 个答案:

答案 0 :(得分:0)

您需要删除引用已删除功能的invoke / call说明,而不是使用UndefinedValue替换它们。这可以通过迭代函数的Def-Use Chain并相应地删除值来实现