Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

x64: 重定位类型

下表中列出的重定位是针对 x64 定义的。

表 12-19  x64: ELF 重定位类型
名称
字段
计算
R_AMD64_NONE
0
R_AMD64_64
1
word64
S + A
R_AMD64_PC32
2
word32
S + A - P
R_AMD64_GOT32
3
word32
G + A
R_AMD64_PLT32
4
word32
L + A - P
R_AMD64_COPY
5
请参阅此表后面的说明。
R_AMD64_GLOB_DAT
6
word64
S
R_AMD64_JUMP_SLOT
7
word64
S
R_AMD64_RELATIVE
8
word64
B + A
R_AMD64_GOTPCREL
9
word32
G + GOT + A - P
R_AMD64_32
10
word32
S + A
R_AMD64_32S
11
word32
S + A
R_AMD64_16
12
word16
S + A
R_AMD64_PC16
13
word16
S + A - P
R_AMD64_8
14
word8
S + A
R_AMD64_PC8
15
word8
S + A - P
R_AMD64_PC64
24
word64
S + A - P
R_AMD64_GOTOFF64
25
word64
S + A - GOT
R_AMD64_GOTPC32
26
word32
GOT + A + P
R_AMD64_SIZE32
32
word32
Z + A
R_AMD64_SIZE64
33
word64
Z + A

注 -  其他重定位类型可用于线程局部存储引用。这些重定位类型将在Chapter 14, 线程局部存储中介绍。

大多数重定位类型的特殊语义与用于 x86 的语义相同。一些重定位类型的语义不只是简单的计算:

R_AMD64_GOTPCREL

此重定位类型具有与 R_AMD64_GOT32 或等效 R_386_GOTPC 重定位类型不同的语义。x64 体系结构提供了相对于指令指针的寻址模式。因此,可以使用单个指令从 GOT 装入地址。

针对 R_AMD64_GOTPCREL 重定位类型进行的计算提供了 GOT 中指定了符号地址的位置与应用重定位的位置之间的差值。

R_AMD64_32

计算出的值会截断为 32 位。链接编辑器可验证为重定位生成的值是否会使用零扩展为初始的 64 位值。

R_AMD64_32S

计算出的值会截断为 32 位。链接编辑器可验证为重定位生成的值是否会使用符号扩展为初始的 64 位值。

R_AMD64_8R_AMD64_16R_AMD64_PC16R_AMD64_PC8

这些重定位类型不适用于 x64 ABI,在此列出是为了说明。R_AMD64_8 重定位类型会将计算出的值截断为 8 位。R_AMD64_16 重定位类型会将所计算的值截断为 16 位。