8.6.6 ScatterAssert 関数とロードアドレスに関連する関数

ScatterAssert 関数を使用すると、 max_size 属性で許可されているよりも複雑なサイズチェックを実行できます。

ScatterAssert(expression) 関数は、最上位またはロード領域内で使用できます。この式はリンクが完了した後で評価され、 expression が FALSE と評価された場合はエラーメッセージが生成されます。
ロードアドレスに関連する関数は、 ScatterAssert 関数内でのみ使用できます。これらの関数は、以下の 3 つのリンカ定義のシンボル値にマップされます。

表 8-3 ロードアドレスに関連する関数

関数 リンカ定義のシンボル値
LoadBase(region_name)
Load$$region_name$$Base
LoadLength(region_name)
Load$$region_name$$Length
LoadLimit(region_name)
Load$$region_name$$Limit
パラメータ region_name には、ロード領域名または実行領域名のいずれかを指定できます。前方参照は使用できません。 region_name は、既に定義されているロード領域または実行領域のみを参照できます。
次の例は、ScatterAssert 関数を使用して、領域の max_size で許可されているよりも複雑なサイズチェックを記述する方法を示しています。
LR1 0x8000
{
    ER0+0
    {
        *(+RO)
    }
    ER1+0
    {
        file1.o(+RW)
    }
    ER2+0
    {
        file2.o(+RW)
    }
    ScatterAssert((LoadLength(ER1) + LoadLength(ER2)) < 0x1000)
                                         ; LoadLength は圧縮後のサイズ
    ScatterAssert((ImageLength(ER1) + ImageLength(ER2)) < 0x2000)
                                         ; ImageLength は未圧縮のサイズ
}
ScatterAssert(ImageLength(LR1) < 0x3000)
                                         ; ロード領域 LR1 の未圧縮のサイズをチェックする
関連する概念
8.6.1 式の評価の数値定数を指定するメソッド
8.6.3 スキャッタファイルでの式の使用
8.6.4 スキャッタファイル内の式の規則
8.6.5 スキャッタファイルで使用する実行アドレスの組み込み関数
8.6.7 スキャッタファイル内のシンボルに関連する関数
8.6.11 ロード領域に厳密に配置した状態で、実行領域でベースアドレスに合わせる例
関連する参考文書
8.2 スキャッタファイルの構文
8.3.2 ロード領域記述の構文
8.4.2 実行領域の記述に含まれている構文
6.3.3 Load$$ 実行領域シンボル
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.