有没有办法从机器指令中获取被调用的函数?
现在我正在确定机器指令是否是函数调用,如下所示:
for (MachineBasicBlock &MBB : MF) {
for (MachineInstr &MI : MBB) {
if (MI.getDesc().isCall()) {
//Function Call
}
}
我尝试按照此操作http://lists.llvm.org/pipermail/llvm-dev/2015-July/088100.html,但在所有情况下我都得到
isSymbol()
作为false
。
注意:我只对直接调用感兴趣(函数指针被忽略)。
您应该能够直接转换第一个操作数:
if(MI.getOperand(0).getType() == llvm::MachineOperand::MO_GlobalAddress) {
const GlobalValue *GV = MI.getOperand(0).getGlobal();
const Function *Callee = dyn_cast<Function>(GV);
assert(Callee != nullptr && "Unexpected type of global value");
}