RELOC

RELOC ディレクティブは、オブジェクトファイルで ELF の再配置を明示的にエンコードします。

Show/hide構文

RELOC n, symbol
RELOC n

各項目には以下の意味があります。

n

それぞれ、A32/T32 または A64 コードで、0 ~ 255 または 0 ~ 232-1 の範囲の整数である必要があります。A32/T32 コードでは、代わりに、ARM アーキテクチャのアプリケーションバイナリインタフェースで定義されている再配置名の 1 つを指定できます。

symbol

任意の PC 相対ラベルを指定できます。

Show/hide使用法

RELOC n, symbol を使用し、symbol というラベルの付いたアドレスを基準にして再配置を行います。

RELOC ディレクティブを命令の直後に使用すると、その命令で再配置が行われます。RELOC ディレクティブを DCBDCWDCD、またはその他のデータ生成ディレクティブの直後に使用すると、データの開始位置で再配置が行われます。適用される加数は、命令またはデータでエンコードする必要があります。 

アセンブラによって同じ場所で既に再配置が行われている場合、RELOC ディレクティブの設定内容で再配置が更新されます。以下に例を示します。

DCD     sym2 ; sym32 への R_ARM_ABS32
RELOC   55   ; それを R_ARM_ABS32_NOI に変更する

RELOC は、データ生成ディレクティブ以外のディレクティブ、LTORGALIGN の後に使用したり、AREA の最初の項目として使用したりした場合など、その他すべての場合に失敗します。

RELOC n を使用し、匿名のシンボル(シンボルテーブルのシンボル 0)を基準に再配置を行います。以前にアセンブラによって再配置が行われていない場合に RELOC n を使用すると、匿名のシンボルを基準に再配置が行われます。

Show/hide

IMPORT  impsym
LDR     r0,[pc,#-8]
RELOC   4, impsym
DCD     0
RELOC   2, sym
DCD     0,1,2,3,4       ; 最後のワードが再配置される
RELOC   38,sym2         ; R_ARM_TARGET1
DCD     impsym
RELOC   R_ARM_TARGET1   ; 再配置コード 38

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814