7.13.2 タイプ 1 のイメージ:1 つのロード領域と連続する実行領域

タイプ 1 のイメージは、ロードビュー内の 1 つのロード領域と、実行ビュー内の 3 つの実行領域から構成されます。実行領域はメモリマップ内で連続して配置されます。

--ro_base address を使用すると、RO 出力セクションを含んでいる領域のロードアドレスと実行アドレスを指定できます。以下の例では、--ro_base 0x040000 を使用することと同じ意味を持つスキャッタロード記述を示しています。
LR_1 0x040000     ; LR_1 という名前のロード領域を定義し、0x040000 から開始する。
{
    ER_RO +0      ; 最初の実行領域は ER_RO という名前で、前の領域の末尾から
                  ; 開始する。前の領域は存在しないため、
                  ; アドレスは 0x040000 になる。
    {
        * (+RO)   ; すべての RO セクションはこの領域に
                  ; 連続して配置される。
    }
    ER_RW +0      ; 2 番目の実行領域は ER_RW という名前で、前の領域の末尾から
                  ; 開始される。
                  ; アドレスは 0x040000 + ER_RO 領域のサイズになる。
    {
        * (+RW)   ; すべての RW セクションはこの領域に
                  ; 連続して配置される。
    }
    ER_ZI +0      ; 最後の実行領域は ER_ZI という名前で、前の領域の末尾
                  ; 0x040000 + ER_RO 領域のサイズ + ER_RW 領域のサイズ
                  ; から開始される。
    {
        * (+ZI)   ; すべての ZI セクションはここに連続して配置される。
    }
}
この例では、以下のようになります。
  • この記述により、ロードアドレスに 0x040000 が設定された、LR_1 という名前の 1 つのロード領域を含んでいるイメージが作成されます。
  • このイメージには、ER_ROER_RWER_ZI という 3 つの実行領域があり、それぞれ RO、RW、ZI の各出力セクションを含んでいます。RO と RW はルート領域です。ZI は実行時に動的に作成されます。ER_RO の実行アドレスは 0x040000 です。実行領域の記述において、+offset 形式のベース指定子を使用することにより、3 つの実行領域がすべてメモリマップ内で連続して配置されます。これにより、実行領域をその前の実行領域の直後に配置できます。
--reloc オプションを使用すると、再配置可能なイメージを作成できます。--reloc を単独で使用すると、単一のロード領域の属性が RELOC に設定される、単純タイプ 1 に似たイメージが生成されます。

ROPI の例

この例では、実行領域はメモリマップ内で連続して配置されます。ただし、--ropi を指定すると、RO 出力セクションを保持するロード領域と実行領域が位置非依存としてマークされます。
以下の例では、--ro_base 0x010000 --ropi を使用することと同じ意味を持つスキャッタロード記述を示しています。
LR_1 0x010000 PI        ; 最初のロード領域を 0x010000 から開始する。
{
    ER_RO +0            ; PI 属性が親から継承される。
                        ; デフォルトの実行アドレスは 0x010000 だが、コードは
                        ; 移動できる。
    {
        * (+RO)         ; すべての RO セクションはここに配置される。
    }
    ER_RW +0 ABSOLUTE   ; PI 属性が ABSOLUTE によってオーバーライドされる。
    {
        * (+RW)         ; 次に RW セクションが配置される。このセクションは移動できない。
    }
    ER_ZI +0            ; ER_ZI 領域は ER_RW 領域の後に配置される。
    {
        * (+ZI)         ; すべての ZI セクションはここに連続して配置される。
    }
}
RO 実行領域である ER_RO は、ロード領域 LR_1 から PI 属性を継承します。次の実行領域 ER_RWABSOLUTE としてマークされ、 +offset 形式のベース指定子が使用されます。このため、ER_RW には ER_ROPI 属性が継承されません。また、ER_ZI 領域のオフセットに +0 が設定されているため、この領域は ER_RW 領域の ABSOLUTE 属性を継承します。

イメージに実行専用セクションが含まれている場合には、ROPI はサポートされません。--ropi を使用してイメージをリンクしようとすると、armlink はエラーとなります。
関連する概念
7.13.1 単純イメージを作成するためのコマンドラインオプション
8.3 ロード領域の記述
8.3.6 ロード領域に相対アドレス +offset を使用する際の注意事項
8.4.5 実行領域に相対アドレス +offset を使用する際の注意事項
関連する参考文書
12.118 --ro_base=address
12.119 --ropi
8.3.3 ロード領域の属性
12.115 --reloc
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.