如何将PC(ARMv5)地址映射到源代码?

时间:2011-09-07 19:27:08

标签: c++ c linux arm alignment

我正在开发运行Linux的ARM9E处理器。有时我的应用程序崩溃时会显示以下消息:

  

[142.410000]对齐陷阱:rtspserverd(996)PC = 0x4034f61c   Instr = 0xe591300c地址= 0x0000000d FSR 0x001

如何将PC地址翻译成实际的源代码?换句话说,我怎样才能理解这条消息呢?

2 个答案:

答案 0 :(得分:4)

objdump。转储您的可执行文件,然后搜索4034f61c:-x--disassemble-l选项特别有用。

答案 1 :(得分:2)

您可以打开编译器中的列表并告诉链接器生成映射文件。映射文件将为您提供绝对地址的含义,直到出现问题的函数,而列表将帮助您确定函数中异常的确切位置。

例如,gcc你可以做

gcc -Wa,-a,-ad -c foo.c > foo.lst

在文件foo.lst中生成列表。

-Wa,将以下选项发送给汇编程序(gas)。

-a告诉gas生成标准输出列表。

-ad告诉gas省略调试指令,否则会增加很多混乱。

GNU链接器生成映射文件的选项是-M--print-map。如果您与gcc链接,则需要使用以-Wl,开头的选项将选项传递给链接器,例如-Wl,-M

或者您也可以在调试器中运行您的应用程序(例如gdb),并使用bt命令查看崩溃后的堆栈转储。