从链接描述文件输出可重定位的节数据

时间:2015-12-03 14:30:35

标签: linker ld binutils linker-scripts

使用BYTELONG等命令,可以从链接描述文件中include explicit bytes of data in an output section。链接页面还描述了这些命令可用于输出符号的值。

我原本预计如果你执行部分链接(即使用ld的{​​{3}}选项),将为以这种方式输出的符号发出重定位记录。但是,链接器似乎只输出符号的当前已知值 1

这是一个MWE来澄清我的意思。

test.c

int foo = 1, bar = 2;

test.ld

SECTIONS {
    .data : {
        *(.data)
        LONG(foo)
        LONG(bar)
    }
}

然后运行以下命令:

$ gcc -c test.c
$ ld -T test.ld -r -o test.elf test.o
$ readelf -r test.elf                

There are no relocations in this file.
$ readelf -x .data test.elf

Hex dump of section '.data':
  0x00000000 01000000 02000000 00000000 04000000 ................

如您所见,没有创建重定位,输出的值是foobar的当前已知值。

这可能是个错误吗?如果没有,有没有办法强制链接器输出添加到输出节的符号的重定位记录?

1 我不确定这是正确的用语。我的意思是您在输入对象文件上运行readelf -s时看到的值。

0 个答案:

没有答案