空き領域の予約

実行領域のスキャッタロード記述で EMPTY 属性を使用して、スタック用の空きメモリブロックを予約できます。

このメモリブロックはロード領域の一部ではありませんが、実行時に使用するために割り当てられます。 このメモリブロックはダミーの ZI 領域して作成されるため、リンカがこのブロックにアクセスするときは以下のシンボルが使用されます。

長さに負の値が指定されている場合は、指定されているアドレスが、その領域の終了アドレスとして使用されます。 このアドレスには、相対アドレスではなく絶対アドレスを指定して下さい。

以下の例では、実行領域の定義 STACK 0x800000 EMPTY -0x10000 によって、アドレス 0x7F0000 で始まり、アドレス 0x800000 で終わる STACK という領域が定義されています。

Example 32. スタック用の領域の予約

LR_1 0x80000                          ; ロード領域を 0x80000 から開始する   
{
    STACK 0x800000 EMPTY -0x10000     ; 長さが負の値であるため、領域は
                                      ; 0x800000 で終わる。 領域の開始アドレスは
                                      ; その長さを使用して計算する。
    {
                                      ; スタックの配置に使用する空き領域
    }
    HEAP +0 EMPTY 0x10000             ; 領域は前の領域の末尾から
                                      ; 開始する。 領域の終了アドレスは正の値の長さを
                                      ; 使用して計算する
    {
                                      ; ヒープの配置に使用する空き領域
    }
    .	..                               ; 残りのスキャッタロード記述...
}

Note

EMPTY 実行領域のために作成されるダミーの ZI 領域は、実行時にゼロで初期化されません。

相対アドレス(+offset)を指定し、負の長さを指定した場合、エラーが生成されます。

以下に、この例を図示します。

Figure 9. スタック用の領域の予約

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as 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

Note

EMPTY 属性は実行領域のみに適用されます。 EMPTY 属性がロード領域の定義に使用されている場合は、リンカによって警告が生成され、この属性は無視されます。

リンカは、EMPTY 領域に使用されるアドレス空間が、他の実行領域に使用されていないかどうかをチェックします。

Show/hide関連項目

概念

『リンカリファレンス』

参照
Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612