我编写了一个程序,它使用 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?”
谢谢。