Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

7.9.1. Linux ツールチェーンの再配置情報

動的再配置は、実行可能ファイルと共有オブジェクトのランタイム再配置セクションに現れますが、( デバッグ情報に使用される R_NIOS2_TLS_DTPREL の例外がある ) オブジェクト・ファイルには現れません。他の再配置は動的ではありません。
表 88.  動的再配置
R_NIOS2_TLS_DTPMOD
R_NIOS2_TLS_DTPREL
R_NIOS2_TLS_TPREL
R_NIOS2_COPY
R_NIOS2_GLOB_DAT
R_NIOS2_JUMP_SLOT
R_NIOS2_RELATIVE

R_NIOS2_GOT16、R_NIOS2_GOT_LO、および / または R_NIOS2_GOT_HA を使用して参照されるグローバル・オフセット・テーブル (GOT) エントリーは、ロード時に解決される必要があります。R_NIOS2_CALL16、R_NIOS2_CALL_LO および / または R_NIOS2_CALL_HA を使用してのみ参照される GOT エントリーは、最初にプロシージャー・リンケージ・テーブル (PLT) エントリーを参照してから、遅延し解決されます。

TP 相対再配置は 16 ビット再配置のため、ローカル動的またはローカル実行可能なスレッドローカル・ストレージ (TLS) を使用する動的オブジェクトは、64 KB 以上の TLS データは持てません。将来これをサポートするために、新しい再配置が追加される可能性があります。

次の表に示すように、Linux 固有の再配置を生成するために、いくつかの新しいアセンブラー演算子が定義されています。

表 89.  再配置および演算子
再配置 演算子
R_NIOS2_GOT16 %got
R_NIOS2_CALL16 %call
R_NIOS2_GOTOFF_LO %gotoff_hiadj
R_NIOS2_GOTOFF_HA %gotoff_lo
R_NIOS2_PCREL_LO %hiadj
R_NIOS2_PCREL_HA %lo
R_NIOS2_TLS_GD16 %tls_gd
R_NIOS2_TLS_LDM16 %tls_ldm
R_NIOS2_TLS_LDO16 %tls_ldo
R_NIOS2_TLS_IE16 %tls_ie
R_NIOS2_TLS_LE16 %tls_le
R_NIOS2_TLS_DTPREL %tls_ldo
R_NIOS2_GOTOFF %gotoff
R_NIOS2_GOT_LO %got_lo
R_NIOS2_GOT_HA %got_hiadj
R_NIOS2_CALL_LO %call_lo
R_NIOS2_CALL_HA %call_hiadj

%hiadj演算子と %lo演算子は、再配置される表現が PC 相対であるかどうかに応じて、PC 相対再配置または PC 非相対再配置を生成します。例えば、%hiadj(_gp_got - .)は R_NIOS2_PCREL_HA を生成します。%tls_ldoは、即値オペランドとして使用される場合は R_NIOS2_TLS_LDO16 を生成し、.wordディレクティブとともに使用する場合は R_NIOS2_TLS_DTPREL を生成します。