为什么 Elf64 在 64 位 x86 上不使用 Elf64_Rel 重定位?

Why doesn't Elf64 use Elf64_Rel for relocations on 64-bit x86?

https://docs.oracle.com/cd/E23824_01/html/819-0690/chapter6-54839.html#chapter7-2 状态:

64–bit SPARC and 64–bit x86 use only Elf64_Rela relocation entries. Thus, the r_addend member serves as the relocation addend. x86 uses only Elf32_Rel relocation entries. The field to be relocated holds the addend.

存在一个 Elf64_Rel 结构,那么为什么不在 64 位 x86 目标上使用它呢?在这里使用 Elf64_Rela 不会浪费 space 因为预重定位地址只是被忽略了(或者至少从我在测试中看到的总是 0)?

注:r_addendElf64_Rel中被省略,不是简单的未使用。

There exists an Elf64_Rel struct, so why isn't it being used on 64-bit x86 targets?

x86_64 上,有几个可能的 memory models. By default, the small memory model 被使用,不需要任何 64 位重定位。

如果使用 -mcmodel=large 编译,则将使用 64 位重定位