非機密扱い | ![]() | ARM DUI0474JJ | ||
| ||||
ホーム > スキャッタロード機能 > タイプ 2 のイメージ:1 つのロード領域と連続しない実行領域 |
タイプ 2 のイメージは、ロードビュー内の 1 つのロード領域と、実行ビュー内の 3 つの実行領域から構成されます。RW 実行領域が RO 実行領域と隣接しないことを除いては、タイプ 1 のイメージと似ています。
--ro_base=address
を使用すると、RO 出力セクションを含んでいる領域のロードアドレスと実行アドレスを指定できます。
--rw_base=address
を使用すると、RW 実行領域の実行アドレスを指定できます。
実行専用(XO)セクションを含むイメージの場合、XO 実行領域は --ro_base
で指定されるアドレスに配置されます。RO 実行領域は、XO 実行領域と隣接し、その直後に配置されます。
--xo_base address
を使用する場合、XO 実行領域は指定のアドレスで個別のロード領域に配置されます。
以下の例では、
--ro_base=0x010000 --rw_base=0x040000
:
LR_1 0x010000 ; LR_1 という名前のロード領域を定義する。 { ER_RO +0 ; 最初の実行領域は ER_RO という名前で、; 前の領域の末尾から開始する。前の領域は存在しないため、; アドレスは 0x010000 になる。{ * (+RO) ; すべての RO セクションはこの領域に連続して配置される。} ER_RW 0x040000 ; 2 番目の実行領域は ER_RW という名前で、0x040000 から開始する。{ * (+RW) ; すべての RW セクションはこの領域に連続して配置される。} ER_ZI +0 ; 最後の実行領域は ER_ZI という名前で、; アドレスは 0x040000 + ER_RW 領域のサイズになる。{ * (+ZI) ; すべての ZI セクションはここに連続して配置される。} }
この例では、以下のようになります。
この記述により、ロードアドレスに
が設定された 0x010000
LR_1
という名前の 1 つのロード領域を含んでいるイメージが作成されます。
このイメージには、ER_RO
、
ER_RW
、ER_ZI
という 3 つの実行領域があり、それぞれ RO、RW、ZI の各出力セクションを含んでいます。RO 領域はルート領域です。ER_RO
の実行アドレスは
です。0x010000
ER_RW
実行領域と
ER_RO
実行領域は隣接していません。この領域の実行アドレスは
です。0x040000
ER_ZI
実行領域は、その前の実行領域である ER_RW
の直後に配置されます。
RW 実行領域と RO 実行領域が隣接していない点で、--rw_base
を指定して作成するタイプ 2 のイメージと似ています。ただし、--rwpi
を指定すると、RW 出力セクションを保持する実行領域が位置非依存としてマークされます。
以下の例では、
--ro_base=0x010000 --rw_base=0x018000 --rwpi
:
LR_1 0x010000 ; 最初のロード領域を 0x010000 から開始する。{ ER_RO +0 ; デフォルトの ABSOLUTE 属性が親から継承される。; 実行アドレスは 0x010000 です。コードと RO データは; 移動できない。{ * (+RO) ; すべての RO セクションはここに配置される。} ER_RW 0x018000 PI ; PI 属性によって ABSOLUTE がオーバーライドされる。 { * (+RW) ; RW セクションは 0x018000 に配置され、; 移動できる。} ER_ZI +0 ; ER_ZI 領域は ER_RW 領域の後に配置される。{ * (+ZI) ; すべての ZI セクションはここに連続して配置される。} }
RO の実行領域である ER_RO
は、
ロード領域 LR_1
から ABSOLUTE
属性を継承します。次の実行領域である ER_RW
は、PI
としてマークされます。また、ER_ZI
領域のオフセットに
+0
が設定されているため、この領域は ER_RW
領域の PI
属性を
継承します。
タイプ 2 とタイプ 3 のイメージに、--ropi
と --rwpi
の他の組み合わせを使用するスキャッタロードの記述も可能です。
イメージに実行専用メモリが含まれている場合、RWPI はサポートされません。
--rwpi
を使用してこのようなイメージをリンクすると、armlink によってエラーが出力されます。