【发布时间】:2021-05-28 04:24:43
【问题描述】:
背景:
我正在生成 JIT 代码(生成 x86-64 代码)。在 JIT 过程结束后,我生成了一个 .text 部分、一个 .data 部分和一个 .eh_frame 部分(.eh_frame 用于堆栈展开)。我能够成功执行此 JIT 代码。但问题是 GDB。我希望能够使用 GDB 调试这个 JIT 代码(特别是 GDB 的“回溯”命令应该可以工作)。
问题:
我需要告诉 GDB 这个加载的 JIT 代码(特别是我需要告诉 GDB .eh_frame 以便它可以使用该帧进行堆栈展开)。我看到GDB有一个JIT接口:https://sourceware.org/gdb/current/onlinedocs/gdb/JIT-Interface.html
可能的解决方案:
这里有两个选项:
- 将 ELF 文件移交给 GDB
- 编写一个 Customer Jit-Reader 插件来处理自定义对象文件的调试。
现在我有一个自定义对象文件(只是将三个独立的部分加载到内存中)。我不想编写自己的 Jit Reader 插件。
阻塞问题:
有谁知道现有代码可以帮助我将这三个独立的部分打包成一个简单的 ELF 文件(然后我可以通过调用 __jit_debug_register_code() 向 GDB 注册该文件)?我猜我需要做的就是编写一些标题(符合 ELF 规范),其中包含名称和指向该部分的指针。是否有现有的开源代码,如果没有,有人可以指出我自己如何做这个打包吗?
我需要最少的 ELF 文件,这样 GDB 才会满意(我不需要加载 ELF 文件,因为 .text 和 .data 部分已经加载)
【问题讨论】:
标签: compilation gdb elf jit dwarf