リンカーとライブラリ

x64: 再配置型

次の表に、x64 用に定義された再配置を示します。

表 7–16 x64: ELF 再配置型

名前 

値 

フィールド 

計算 

R_AMD64_NONE

0

None

None

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

None

この表のあとの説明を参照してください。 

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


注 –

スレッド固有領域の参照に使用できる再配置はほかにも存在します。これらの再配置については、第 8 章スレッド固有領域 (TLS)で説明しています。


これらの再配置型のほとんどの特別なセマンティクスは、x86 で使用されているものと同じです。いくつかの再配置型には、単純な計算を超えたセマンティクスが存在します。

R_AMD64_GOTPCREL

この再配置のセマンティクスは R_AMD64_GOT32 または等しい R_386_GOTPC 再配置と異なります。x64 アーキテクチャーは、命令ポインタに対して相対的なアドレス指定モードを提供します。したがって、アドレスは 1 つの命令で 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 ビットに切り詰めます。