从LLVM的机器指令中获取调用函数

问题描述 投票:0回答:1

有没有办法从机器指令中获取被调用的函数?

现在我正在确定机器指令是否是函数调用,如下所示:

     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

注意:我只对直接调用感兴趣(函数指针被忽略)。

clang llvm llvm-clang
1个回答
0
投票

您应该能够直接转换第一个操作数:

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.