#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()
. Также вы должны проверить этот opernadisGlobal()
.