7.7 空き領域の予約

スキャッタファイルを使用して、スタックに使用される領域などの空きメモリブロックを予約できます。スキャッタロード記述の実行領域に EMPTY 属性を使用します。

スタック用の空きメモリブロックを予約するには
このメモリブロックはロード領域の一部ではありませんが、実行時に使用するために割り当てられます。このメモリブロックはダミーの ZI 領域として作成されるため、リンカがこのブロックにアクセスするときは以下のシンボルが使用されます。
  • Image$$region_name$$ZI$$Base
  • Image$$region_name$$ZI$$Limit
  • Image$$region_name$$ZI$$Length。
長さに負の値が指定されている場合は、指定されているアドレスが、その領域の終了アドレスとして使用されます。このアドレスには、相対アドレスではなく絶対アドレスを指定して下さい。
以下の例では、実行領域の定義 STACK 0x800000 EMPTY –0x10000 によって、 アドレス 0x7F0000 で始まり、アドレス 0x800000 で終わる STACK という領域が定義されています。
LR_1 0x80000                          ; ロード領域を 0x80000 から開始する
{
    STACK 0x800000 EMPTY -0x10000     ; 長さが負の値であるため、領域は
                                      ; 0x800000 で終わる。領域の開始アドレスは
                                      ; その長さを使用して計算する。
    {
                                      ; スタック配置用の空領域
    }
    HEAP +0 EMPTY 0x10000             ; 領域は前の領域の末尾から
                                      ; 開始する。領域の終了アドレスは正の値の長さを
                                      ; 使用して計算する
    {
                                      ; ヒープ配置用の空領域
    }
    …                               ; 残りのスキャッタロード記述
}

EMPTY 実行領域のために作成されるダミーの ZI 領域は、実行時にゼロで初期化されません。
相対アドレス(+offset )を指定し、負の長さを指定した場合、エラーが生成されます。
以下に、この例を図示します。
図 7-5 スタック用の領域の予約
この図を表示するには、ご使用のブラウザが SVG 形式をサポートしている必要があります。ネイティブでサポートしているブラウザをインストールするか、次のような適切なプラグインをインストールします。Adobe SVG Viewer。.

この例では、リンカによって以下のシンボルが生成されます。
Image$$STACK$$ZI$$Base      = 0x7f0000
Image$$STACK$$ZI$$Limit     = 0x800000
Image$$STACK$$ZI$$Length    = 0x10000
Image$$HEAP$$ZI$$Base       = 0x800000
Image$$HEAP$$ZI$$Limit      = 0x810000
Image$$HEAP$$ZI$$Length     = 0x10000

EMPTY 属性は実行領域のみに適用されます。EMPTY 属性がロード領域の定義に使用されている場合は、リンカによって警告が生成され、この属性は無視されます。
リンカは、EMPTY 領域に使用されるアドレス空間が、他の実行領域に使用されていないかどうかをチェックします。
関連する概念
8.4 実行領域の記述
関連する参考文書
6.3.2 Image$$ 実行領域シンボル
8.4.3 実行領域の属性
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.