リンカーとライブラリ

SPARC: 再配置型


注 -

表 7-27 に示されているフィールド名は、再配置型がオーバーフローを検査するかどうかを通知します。計算される再配置値は意図したフィールドより大きい場合があり、再配置型によっては値の適合を検証 (V) したり結果を切り捨てたり (T) することがあります。たとえば、V-simm13 は、計算された値が simm13 フィールドの外部に 0 以外の有意ビットを持つことがないことを意味します。


表 7-27 SPARC: 再配置型

名前 

値 

フィールド 

計算 

R_SPARC_NONE

0

なし 

なし 

R_SPARC_8

1

V-byte8

S + A

R_SPARC_16

2

V-half16

S + A

R_SPARC_32

3

V-word32

S + A

R_SPARC_DISP8

4

V-byte8

S + A - P

R_SPARC_DISP16

5

V-half16

S + A - P

R_SPARC_DISP32

6

V-disp32

S + A - P

R_SPARC_WDISP30

7

V-disp30

(S + A - P) >> 2

R_SPARC_WDISP22

8

V-disp22

(S + A - P) >> 2

R_SPARC_HI22

9

V-imm22

(S + A) >> 10

R_SPARC_22

10

V-imm22

S + A

R_SPARC_13

11

V-simm13

S + A

R_SPARC_LO10

12

T-simm13

(S + A) & 0x3ff

R_SPARC_GOT10

13

T-simm13

G & 0x3ff

R_SPARC_GOT13

14

V-simm13

G

R_SPARC_GOT22

15

T-simm22

G >> 10

R_SPARC_PC10

16

T-simm13

(S + A - P) & 0x3ff

R_SPARC_PC22

17

V-disp22

(S + A - P) >> 10

R_SPARC_WPLT30

18

V-disp30

(L + A - P) >> 2

R_SPARC_COPY

19

なし 

なし 

R_SPARC_GLOB_DAT

20

V-xword64

S + A

R_SPARC_JMP_SLOT

21

なし 

R_SPARC_JMP_SLOT」を参照

R_SPARC_RELATIVE

22

V-xword64

B + A

R_SPARC_UA32

23

V-word32

S + A

R_SPARC_PLT32

24

V-word32

L + A

R_SPARC_HIPLT22

25

T-imm22

(L + A) >> 10

R_SPARC_LOPLT10

26

T-simm13

(L + A) & 0x3ff

R_SPARC_PCPLT32

27

V-disp32

L + A - P

R_SPARC_PCPLT22

28

V-disp22

(L + A - P) >> 10

R_SPARC_PCPLT10

29

V-simm13

(L + A - P) & 0x3ff

R_SPARC_10

30

V-simm10

S + A

R_SPARC_11

31

V-simm11

S + A

R_SPARC_64

32

V-xword64

S + A

R_SPARC_OLO10

33

V-simm13

( (S + A) & 0x3ff) + O

R_SPARC_HH22

34

V-imm22

(S + A) >> 42

R_SPARC_HM10

35

T-simm13

( (S + A) >> 32) & 0x3ff

R_SPARC_LM22

36

T-imm22

(S + A) >> 10

R_SPARC_PC_HH22

37

V-imm22

(S + A - P) >> 42

R_SPARC_PC_HM10

38

T-simm13

( (S + A - P) >> 32) & 0x3ff

R_SPARC_PC_LM22

39

T-imm22

(S + A - P) >> 10

R_SPARC_WDISP16

40

V-d2/disp14

(S + A - P) >> 2

R_SPARC_WDISP19

41

V-disp19

(S + A - P) >> 2

R_SPARC_7

43

V-imm7

(S + A) & 0x7f

R_SPARC_5

44

V-imm5

(S + A) & 0x1f

R_SPARC_6

45

V-imm6

(S + A) & 0x3f

R_SPARC_DISP64

46

V-xword64

S + A - P

R_SPARC_PLT64

47

V-xword64

L + A

R_SPARC_HIX22

48

V-imm22

( (S + A) ^ 0xffffffffffffffff) >> 10

R_SPARC_LOX10

49

T-simm13

( (S + A) & 0x3ff) | 0x1c00

R_SPARC_H44

50

V-imm22

(S + A) >> 22

R_SPARC_M44

51

T-imm10

( (S + A) >> 12) & 0x3ff

R_SPARC_L44

52

T-imm13

(S + A) & 0xfff

R_SPARC_REGISTER

53

V-xword64

S + A

R_SPARC_UA64

54

V-xword64

S + A

R_SPARC_UA16

55

V-half16

S + A

いくつかの再配置型には、単純な計算を超えた意味が存在します。

R_SPARC_GOT10

この再配置型は R_SPARC_LO10 に似ています。ただし、次の点が異なります。つまり、この再配置型はシンボルの大域オフセットテーブルエントリのアドレスを参照し、かつ大域オフセットテーブルを作成するようにリンカーに指示します。

R_SPARC_GOT13

この再配置型は R_SPARC_13 に似ています。ただし、次の点が異なります。つまり、この再配置型はシンボルの大域オフセットテーブルエントリのアドレスを参照し、かつ大域オフセットテーブルを作成するようにリンカーに指示します。

R_SPARC_GOT22

この再配置型は R_SPARC_22 に似ています。ただし、次の点が異なります。つまり、この再配置型はシンボルの大域オフセットテーブルエントリのアドレスを参照し、かつ大域オフセットテーブルを作成するようにリンカーに指示します。

R_SPARC_WPLT30

この再配置型は R_SPARC_WDISP30 に似ています。ただし、次の点が異なります。つまり、この再配置型はシンボルの手続きリンクテーブルエントリのアドレスを参照し、かつ手続きリンクテーブルを作成するようにリンカーに指示します。

R_SPARC_COPY

リンカーは、動的リンクを行うためにこの再配置型を使用します。この再配置型のオフセット構成要素は、書き込み可能セグメントの位置を参照します。シンボルテーブルインデックスは、現オブジェクトファイルと共有オブジェクトの両方に存在する必要があるシンボルを指定します。実行時、実行時リンカーは共有オブジェクトのシンボルに関連付けられているデータを、オフセットで指定されている位置にコピーします。詳細は、「再配置のコピー」を参照してください。

R_SPARC_GLOB_DAT

この再配置型は R_SPARC_64 に似ています。ただし、次の点が異なります。つまり、この再配置型は大域オフセットテーブルエントリを、指定されたシンボルのアドレスに設定します。この特殊な再配置型を使うと、シンボルと大域オフセットテーブルエントリの対応付けを判定できます。

R_SPARC_JMP_SLOT

リンカーは、動的リンクを行うためにこの再配置型を作成します。この再配置型のオフセット構成要素は、手続きリンクテーブルエントリの位置を与えます。実行時リンカーは、手続きリンクテーブルエントリを変更して指定シンボルアドレスに制御を渡します。

R_SPARC_RELATIVE

リンカーは、動的リンクを行うためにこの再配置型を使用します。この再配置型のオフセット構成要素は、相対アドレスを表す値が存在する、共有オブジェクト内の位置を与えます。実行時リンカーは共有オブジェクトが読み込まれる仮想アドレスを相対アドレスに加算することで、対応する仮想アドレスを計算します。この型に対する再配置エントリは、シンボルテーブルインデックスに対して 0 を指定しなければなりません。

R_SPARC_UA32

この再配置型は R_SPARC_32 に似ていますが、整列されていないワードを参照する点が異なります。つまり、再配置されるワードは、任意整列が存在する 4 つの別個のバイトとして処理されなければなりません (アーキテクチャの要求に従って整列されるワードとしては処理されません)。

R_SPARC_OLO10

この再配置型は R_SPARC_LO10 に似ていますが、符号付き 13 ビット即値フィールドを十分に使用するために余分なオフセットが追加される点が異なります。

R_SPARC_HH22

アセンブラは、"imm22-instruction ... %hh (absolute) ..." という形式の命令を認識すると、この再配置型を使用します。

R_SPARC_HM10

アセンブラは、"simm13-instruction ... %hm (absolute) ..." という形式の命令を認識すると、この再配置型を生成します。

R_SPARC_LM22

アセンブラは、"imm22-instruction ... %lm (absolute) ..." という形式の命令を認識すると、この再配置型を使用します。この再配置型は R_SPARC_HI22 に似ていますが、妥当性検査ではなく切り捨てを行う点が異なります。

R_SPARC_PC_HH22

アセンブラは、"imm22-instruction ... %hh (pc-relative) ..." という形式の命令を認識すると、この再配置型を使用します。

R_SPARC_PC_HM10

アセンブラは、"simm13-instruction ... %hm (pc-relative) ..." という形式の命令を認識すると、この再配置型を生成します。

R_SPARC_PC_LM22

アセンブラは、"imm22-instruction ... %lm (pc-relative) ..." という形式の命令を認識すると、この再配置型を使用します。この再配置型は R_SPARC_PC22 に似ていますが、妥当性検査ではなく切り捨てを行う点が異なります。

R_SPARC_7

アセンブラは 7 ビットソフトウェアトラップ番号に対してこの再配置型を使用します。

R_SPARC_HIX22

この再配置型は、64 ビットアドレス空間の最上位 4GB に限定される実行可能ファイルに対して R_SPARC_LOX10 と共に使用されます。R_SPARC_HI22 に似ていますが、リンク値の 1 の補数を与えます。

R_SPARC_LOX10

R_SPARC_HIX22 と共に使用されます。R_SPARC_LO10 に似ていますが、必ずリンク値のビット 10 からビット 12 までを設定します。

R_SPARC_H44

アセンブラは、"imm44-instruction ... %h44 (absolute) .." という形式の命令を認識すると、この再配置型を使用します。

R_SPARC_M44

アセンブラは、"imm44-instruction ... %m44 (absolute) ..." という形式の命令を認識すると、この再配置型を生成します。

R_SPARC_L44

この再配置型は再配置型 R_SPARC_H44 および R_SPARC_M44 と共に使用され、44 ビット絶対アドレス指定モデルを生成します。アセンブラは、"imm44-instruction ... %l44 (absolute) ..." という形式の命令を認識すると、この再配置型を生成します。

R_SPARC_REGISTER

この再配置型は、レジスタシンボルを初期化するために使用されます。この再配置型のオフセット構成要素には、初期化されるレジスタ番号が存在します。SHN_ABS 型のこのレジスタには、対応するレジスタシンボルが存在しなければなりません。