为 MCU 应用程序添加符号文件,闪存上有偏移量,不显示任何函数名称

add-symbol-file for MCU app with offset on flash not showing any function names

我在 imx-rt-1024 nxp 芯片上有一个应用 运行。我有一个引导加载程序和实际的固件应用程序。我的引导加载程序位于 0x60000000,我的固件应用程序通常位于 0x60020000。

但该应用程序是使用 -fPIC(位置独立代码)编译的,因此我还可以将其闪存到闪存中的任何偏移位置。它还部署在 0x600b0000 上。

当我的 JLink 调试器在偏移应用程序中处于 运行 时,我可以将它连接到应用程序,但是,它不会在任何断点处中断,因为它不知道如何映射符号(自 elf文件会将所有地址映射到编译时地址:0x60020000)。

稍作阅读后,我应该能够加载带有如下偏移量的 elf 文件的符号:

gdb> add-symbol-file Debug/iobox-imx-rt-1020.axf 90000

我的elf文件是`iobox-imx-rt-1020.axf',0x60020000和0x600b0000之间的偏移量是0x90000。

gdb声称已经加载了符号,但之后我仍然无法破解或看到任何符号/函数名称。

remove-symbol-file Debug/iobox-imx-rt-1020.axf
No symbol file found
add-symbol-file Debug/iobox-imx-rt-1020.axf 90000
add symbol table from file "Debug/iobox-imx-rt-1020.axf" at
    .text_addr = 0x15f90
(y or n) [answered Y; input not from terminal]
Reading symbols from Debug/iobox-imx-rt-1020.axf...

我做错了什么?我误解了偏移量吗?它应该与 90000 不同吗?

Am I misunderstanding the offset?

很有可能。偏移量应该是 .text 在运行时 的地址,而 90000 == 0x15f90 不是。

使用 readelf -WS Debug/iobox-imx-rt-1020.axf | grep .text 找出 .text 的起始位置(可能是 PIE 二进制文件中的某个低值),并且(假设您的加载程序将文件映射到 0x600b0000)使用 0x600b0000 + $text_start add-symbol-file 命令。