我想为某些部分指定对齐方式。对于ld 2.20.0
,以下方法有效:
创建仅包含应对齐的部分的链接描述文件,例如:
SECTIONS
{
.data ALIGN(0x40): { *(.data) }
.text ALIGN(0x40): { *(.text) }
.plt ALIGN(0x10): { *(.plt) }
}
然后链接:
-rpath-link=/path/to/LinkerScript.ld /path/to/LinkerScript.ld
e.g。在rpath-link中包含脚本,并将其作为目标文件之一传递。
现在,当使用gold 2.23.1
以相同方式进行链接时,脚本将被拒绝,并显示以下错误:
LinkerScript.ld: SECTIONS seen after other input files; try -T/--script
所以黄金要我指定一个完整的链接描述文件,但是我只想更改一些属性。这可能吗?
我已经尝试过了:
-T
选项传递脚本。这会生成无法启动的损坏的可执行文件。据我所知,这是因为-T
只接受完整的链接描述文件,而上述内容只是现有脚本的“注释”。-T
选项将脚本传递给ld 2.20.0
时,由于某些部分未指定,因此无法链接。对于我的用例,它不是一个“完整的”链接描述文件。ld --verbose
将打印默认的链接描述文件。我不得不删除gold
无法理解的几个符号,之后使用-T/path/to/LinkerScript.ld
选项生成的可执行文件不再起作用。gold
无法显示其默认链接描述文件(它不使用任何内容)。非常感谢任何帮助!
答案 0 :(得分:0)
我找到了解决问题的解决方案。
通过包含具有虚拟对齐的汇编程序文件,可以实现数据和文本部分的对齐。一个部分的对齐将是在任何地方分离的最大对齐,因此至少它将具有这种对齐。
示例文件align.s(使用汇编程序编译并在链接中包含目标文件):
.section .text .balign 0x40 .section .data .balign 0x40 .end