GCC:在链接过程中打印符号的值?

时间:2016-09-11 19:16:11

标签: gcc arm ld cortex-m

是否有可能让LD打印出符号的值?可能有一种愚蠢的方式来打印价值?

以下是与我的上下文问题相关的详细信息:

我正在使用GCC 4.9编译Cortex-M7的代码。处理器有两组闪存。 0x0020.00000x0800.0000各占1MB。

在CRT代码中,它尝试将mainR2的地址的PC相对负载,然后分支到它。但是,存储在常量表中的值不正确。

来自调试器反汇编:

ldr r2, =APP_ENTRY_POINT
    4A29        ldr r2, 0x002003B8
--- thumb_crt0.s -- 226 ------------------------------------
blx r2
    4790        blx r2  

thumb_crt0.o的objdump:

000000aa <start>:
  aa:   2000        movs    r0, #0
  ac:   2100        movs    r1, #0
  ae:   4a29        ldr r2, [pc, #164]  ; (154 <memory_set+0x8a>)
  b0:   4790        blx r2

Word存储在偏移量:

ldr r2, =APP_ENTRY_POINT
    080007ED    .word 0x080007ED

根据nm的实际主要地址:

Silverback: nm Nucleo.elf | grep main
002007ec N main

1 个答案:

答案 0 :(得分:0)

我找到一个很好的选项ld将mapfile打印到stdout,然后grep你想要的东西:

g++ a.cpp -Wl,-M | grep -w main

收益率(窗口):

0x00000000004015dc                main

注意:当您objdump未链接的目标文件时,重定位/调用地址通常是错误的:链接器尚未运行。