我正在使用llvm编译我的C程序。我想知道是否生成了特定的汇编序列,如果生成了它,它与哪个源代码行相关联。例如,我想在每次生成push %eax
指令时记录。有没有办法解决这个问题?
答案 0 :(得分:0)
如果其他人偶然发现类似的问题。
我看过的地方是LLVMs后端代码。特别是我关心的是X86组件生成。
修改和添加测试有两个主要方面。
ASMPrinter
类lib/CodeGen/ASMPrinter/ASMPrinter.cpp
,它具有不同的发射函数来处理函数,基本块等。通过它们。这些函数遍历每个机器指令MI
,其中包含getOperand()
和getOpCode()
等函数,可根据需要检查特定指令。 每个特定操作码和实际指令都在目标特定文件中指定,例如lib/Target/X86/X86GenInstrInfo.inc
要添加日志声明,例如
errs()<<"Opcode is "<<MI.getOpcode()<<"\n";
MI.dump();
,您可以在运行llc file.bc
希望有所帮助