1

我想为某些部分指定对齐方式。对于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
    

    例如,将脚本包含在 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的是,没有显示其默认链接器脚本的选项(它不使用任何链接器脚本)。
  • 手册页没有指定如何使用参数更改上述情况的对齐方式。

任何帮助将不胜感激!

4

1 回答 1

1

我找到了解决我的问题的解决方案。

  • 数据和文本部分的对齐可以通过包含一个带有虚拟对齐的汇编文件来实现。一个部分的对齐方式将是任何地方指定的最大对齐方式,因此它至少会具有这种对齐方式。

    示例文件 align.s(使用您的汇编程序编译并在链接中包含目标文件):

    .section .text
    .balign 0x40

    .section .data
    .balign 0x40

    。结尾
  • gold 链接器按 PLT 和 GOT 条目的大小(分别为 16 和 8 字节)对齐它们。这对我的用例来说已经足够了。
于 2013-12-01T14:58:23.017 回答