【发布时间】:2016-03-25 18:36:07
【问题描述】:
我编写了一个程序,它使用 LLVM 3.5 作为 JIT 编译器,我正在尝试更新它以在 LLVM 3.7 中使用 MCJIT。我大部分时间都在工作,但我正在努力重现我用 LLVM 3.5 实现的一项仅调试功能。
我希望能够看到 JIT 进程生成的主机代码(例如 x86、x64 或 ARM,而不是 LLVM IR);在调试版本中,我在程序运行时将其注销。使用 LLVM 3.5,我可以通过调用 ExecutionEngine::runJITOnFunction() 来填充 llvm::MachineCodeInfo 对象来做到这一点,该对象为我提供了生成代码的起始地址和大小。然后我可以反汇编那个代码。
我似乎在 MCJIT 中找不到任何等价物。我可以获取函数的起始地址(例如通过 getPointerToFunction()),但不能获取大小。
我见过Disassemble Memory,但除了答案中没有那么多细节之外,它似乎更多的是关于如何反汇编字节序列。我知道该怎么做,我的问题是:我怎样才能首先掌握字节序列?
如果有助于更具体化,请将此问题重新解释为:“如何扩展示例 Kaleidoscope JIT 以显示它生成的机器代码(x86、ARM 等),而不仅仅是 LLVM IR?”
谢谢。
【问题讨论】:
标签: llvm disassembly mcjit