11.3 ベースプラットフォームモデルを使用した PLT シーケンスの配置

リンカでは、ベースプラットフォームモデルのリンクの場合に、コードを含む複数のロード領域に対するプロシージャリンクテーブル(PLT)の生成をサポートしています。

ベースプラットフォームモデルの場合(--pltgot=direct)に PLT の生成を有効にするには、PLT シーケンスを生成する --pltgot=option を使用します。オプション --pltgot_opts=crosslr を使用すると、RELOC ロード領域間で呼び出しを行うためのエントリを PLT に追加できます。複数のロード領域に対する PLT 生成は、--pltgot=direct でのみサポートされます。
--pltgot_opts=crosslr オプションは、イメージが動的にロードされる際に互いに関連して移動する複数のロード領域がある場合に便利です。リンカによってロード領域ごとに PLT が生成されるため、離れている PLT にアクセスするのに呼び出しを拡張する必要がありません。
リンカによって生成された PLT セクションの配置
  • ロード領域が 1 つしかない場合、PLT は 1 つです。オブジェクト anon$$obj.o.plt という名前のセクションがリンカによって作成されます。
  • ロード領域が複数ある場合は、PLT セクションを必要とするロード領域ごとに PLT セクションが作成されます。デフォルトでは、PLT セクションはコードを含む最初の実行領域内に配置されます。配置先は、スキャッタファイルで正確な PLT セクション名を指定することでオーバーライドできます。
    例えば、 LR Name という名前のロード領域の場合、PLT セクションはオブジェクト anon$$obj.o.plt_LR_NAME という名前になります。スキャッタファイルでこの PLT セクションの名前を正確に指定するには、以下のセレクタを使用します。
    anon$$obj.o(.plt_LR_NAME)
以下の点に注意して下さい。
  • ロード領域 LR_NAME の PLT をロード領域 LR_NAME の範囲外に移動すると、リンカによってエラーメッセージが生成されます。
  • ロード領域 LR_NAME RELOC 実行領域と RELOC 以外の実行領域が混在している場合、リンカによってエラーメッセージが生成されます。これは、実行時に RELOC 実行領域から PLT にアクセスできる保証がないためです。
  • --pltgot=indirect--pltgot=sbrel は、複数のロード領域ではサポートされません。
関連する概念
2.5 ベースプラットフォームリンクモデル
関連する参考文書
12.11 --base_platform
12.108 --pltgot=type
12.109 --pltgot_opts=mode
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.