8.6.5 スキャッタファイルで使用する実行アドレスの組み込み関数

実行アドレスを計算するためにスキャッタファイルで使用する組み込み関数が用意されています。

実行アドレスに関連する関数は、 base_address +offset 値、または max_size を指定した場合にのみ使用できます。これらの関数は、次の表に示すリンカ定義のシンボルの組み合わせにマップされます。

表 8-2 実行アドレスに関連する関数

関数 リンカ定義のシンボル値
ImageBase(region_name)
Image$$region_name$$Base
ImageLength(region_name)
Image$$region_name$$Length + Image$$region_name$$ZI$$Length
ImageLimit(region_name)
Image$$region_name$$Base + Image$$region_name$$Length + Image$$region_name$$ZI$$Length
パラメータ region_name には、ロード領域名または実行領域名のいずれかを指定できます。前方参照は使用できません。 region_name は、既に定義されているロード領域または実行領域のみを参照できます。

.ANY セレクタパターンの使用時は、これらの関数は使用できません。これは、セクションの割り当て時、.ANY 領域に最大サイズが使用されるためです。すべての領域のサイズが判明するのは .ANY の割り当て後であるため、その時点では最大サイズは利用できない可能性があります。
次の例は、 ImageLimit(region_name) を使用して、1 つの実行領域を別の実行領域の直後に配置する方法を示しています。
LR1 0x8000
{
    ER1 0x100000
    {
        *(+RO)
    }
}
LR2 0x100000
{
    ER2 (ImageLimit(ER1))               ; ER1 の後に ER2 を配置する
    {
        *(+RW +ZI)
    }
}

式での +offset の使用

実行領域の +offset 値は、前の領域を基に定義されます。この値は、他の式 (AlignExpr など)への入力として使用できます。以下に例を示します。
LR1 0x4000
{
    ER1 AlignExpr(+0, 0x8000)
    {
        …
    }
}
AlignExpr を使用すると、+0 の結果は 0x8000 の境界で整列されます。そのため、作成される実行領域のロードアドレスは 0x4000 になりますが、実行アドレスは 0x8000 になります。
関連する概念
8.3.6 ロード領域に相対アドレス +offset を使用する際の注意事項
8.6.1 式の評価の数値定数を指定するメソッド
8.6.3 スキャッタファイルでの式の使用
8.6.4 スキャッタファイル内の式の規則
8.6.6 ScatterAssert 関数とロードアドレスに関連する関数
8.6.7 スキャッタファイル内のシンボルに関連する関数
8.7 相対ベースアドレスのロード領域と ZI 実行領域を含むスキャッタファイル
8.4.5 実行領域に相対アドレス +offset を使用する際の注意事項
8.6.11 ロード領域に厳密に配置した状態で、実行領域でベースアドレスに合わせる例
関連する参考文書
8.2 スキャッタファイルの構文
8.3.2 ロード領域記述の構文
8.4.2 実行領域の記述に含まれている構文
8.6.8 AlignExpr(expr, align) 関数
6.3.2 Image$$ 実行領域シンボル
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.