如何重新定位bfd尺寸符号?

时间:2013-11-01 21:34:04

标签: ld binutils bfd

使用gcc在二进制文件嵌入elf图像时,有没有办法更改自动生成的_binary_*_size符号的地址?与_binary_*_start_binary_*_end符号不同,_binary_*_size符号似乎不符合代码的基址。它们位于bfd绝对部分(*ABS*)。

例如:

$ arm-linux-gnueabihf-gcc -nostdlib -Wl,-Ttext=0x80000000,--format=binary,foo.bin,--format=default boot.S
$ arm-linux-gnueabihf-nm a.out | sort
00000010 A _binary_foo_bin_size
80000000 T _start
80008004 D _binary_foo_bin_start
80008014 D _binary_foo_bin_end
80008014 A __bss_start
80008014 A __bss_start__
80008014 A __bss_end__
80008014 A _bss_end__
80008014 A _edata
80008014 A _end
80008014 A __end__

我希望_binary_foo_bin_size位于0x80008***而不是0x00000***。 (最好不要编写我自己的链接描述文件或使用额外的objcopy命令。)

1 个答案:

答案 0 :(得分:0)

我认为_size符号记录了该部分的大小。因此,抵消此符号将是错误的 - 它将不再记录大小。

我很好奇为什么你需要这样做。你没说。也许还有其他方法可以实现你的目标。