Получение вызываемой функции из машинной инструкции LLVM

#clang #llvm #llvm-clang

#clang #llvm #llvm-clang

Вопрос:

Есть ли способ получить вызываемую функцию из машинной инструкции?

Прямо сейчас я определяю, является ли машинная инструкция вызовом функции или нет, как показано ниже:

      for (MachineBasicBlock amp;MBB : MF) {
      for (MachineInstr amp;MI : MBB) {
        if (MI.getDesc().isCall()) {
             //Function Call
        }
      }
  
  

Я пытался следовать этому http://lists.llvm.org/pipermail/llvm-dev/2015-July/088100.html , но я получаю isSymbol() , как false и во всех случаях.

Примечание: меня интересуют только прямые вызовы (указатели на функции игнорируются).

Комментарии:

1. Я не знаком с этой частью LLVM, но не isCall следует вызывать MI напрямую? Вы также пробовали isGlobal() использовать операнды?

2. Не уверен, что это правильный или универсальный способ, но я получаю имя вызываемого абонента следующим образом: MI.getOperand(0).getGlobal()->getName().str() . Также вы должны проверить этот opernad isGlobal() .