AREA

AREA ディレクティブは、新しいコードセクションまたはデータセクションをアセンブルするようアセンブラに指示します。 これらのセクションは、ンカによって操作される、名前付きで独立した分割不可能なコードまたはデータのかたまりです。

Show/hide構文

AREA sectionname{,attr}{,attr}...

各パラメータには以下の意味があります。

sectionname

セクションに割り当てる名前を指定します。

セクションには任意の名前を指定できます。 ただし、アルファベット以外の文字で始まる名前は縦棒で囲む必要があります。これに反すると、セクション名エラーが生成されます。 例えば、|1_DataArea| のように記述します。

定型の名前は従来どおりです。 例えば、|.text| は、C コンパイラによって生成されるコードセクション、または C ライブラリに関連付けられたコードセクションに使用されます。

attr

1 つ以上のセクション属性をコンマで区切って指定します。 有効な属性は以下のとおりです。

ALIGN=expression

デフォルトでは、ELF セクションは 4 バイト境界で整列されます。expression には 0 ~ 31 の任意の整数値を指定できます。このセクションは 2expression バイト境界で整列されます。 例えば、expression に 10 が指定されている場合、このセクションは 1KB 境界で整列されます。

これは、ALIGN ディレクティブの指定方法とは異なります。

Note

ARM コードセクションには ALIGN=0 または ALIGN=1 を使用しないで下さい。

Thumb コードセクションには ALIGN=0 を使用しないで下さい。

ASSOC=section

section には、関連する ELF セクションを指定します。sectionname は、section を含むすべてのリンクに含まれている必要があります。

CODE

マシン命令を保持します。 READONLY がデフォルトです。

CODEALIGN

ALIGN ディレクティブが異なるパディングを指定しない限り、セクション内の ALIGN ディレクティブが ARM または Thumb 命令後に使用される際に、アセンブラによって NOP 命令が挿入されます。

COMDEF

共通セクションの定義です。 この ELF セクションは、コードまたはデータを保持できます。 このセクションは、他のソースファイル内にある同じ名前の付いた他のセクションと同じである必要があります。

同じ名前の付いた同一の ELF セクションは、リンカによって同じメモリセクションにオーバーレイされます。 これらのセクションが異なっている、リンカによって警告メッセージが生成され、セクションのオーバーレイは行われません。

COMGROUP=symbol_name

名前付きの ELF セクショングループの AREA の部分となる署名を指定します。 詳細については、GROUP=symbol_name を参照して下さい。 COMGROUP 属性は、ELF セクショングループを GRP_COMDAT フラグでマークします。

COMMON

共通データセクションです。 このセクション内ではコードまたはデータは定義できません。 このセクションは、リンカによってゼロに初期化さます。 同じ名前の付いたすべての共通セクションは、リンカによって同じメモリセクションにオーバーレイされます。 すべてのセクションが同サイズである必要はありません。 リンカは、同じ名前の付いたセクションのうち最も大きな共通セクションに必要とされるだけの空間を割り当ます。

DATA

命令ではなくデータを保持します。 READWRITE がデフォルトです。

FINI_ARRAY

現在の領域の ELF 型を SHT_FINI_ARRAY に設定します。

GROUP=symbol_name

名前付きの ELF セクショングループの AREA の部分となる署名を指定します。 ソースファイル、またはソースファイルによってインクルードされるファイルによって定義される必要があります。 同じ symbol_name 署名のすべての AREAS は、同じグループの部分になります。 グループ内のセクションは、一緒に保持または破棄されます。

INIT_ARRAY

現在の領域の ELF 型を SHT_INIT_ARRAY に設定します。

LINKORDER=section

イメージ内での現在のセクションの相対的な位置を指定します。 その結果、LINKORDER 属性を備えるセクションすべての順序が、互いに関してイメージ内で対応する名前付き sections の順序と同じになります。

MERGE=n

リンカが現在のセクションを MERGE=n 属性を備えた他のセクションとマージできることを示します。n はセクション内の要素のサイズです。例えば、文字の場合には n は 1 です。 この属性があってもリンカはセクションのマージを強制されないので、必ずしもセクションがマージされるとは限りません。

NOALLOC

ターゲットシステム上のメモリがこのエリアに割り当てられないことを示します。

NOINIT

データセクションが初期化されていないか、またはゼロに初期化されていることを示します。 この属性に含まれるのは、空間予約ディレクティブ SPACE か、初期値がゼロに設定された DCBDCDDCDUDCQDCQUDCW、または DCWU ディレクティブだけです。 エリアを初期化しないか、またはゼロで初期化するかはリンク時に決めることができます。

PREINIT_ARRAY

現在の領域の ELF 型を SHT_PREINIT_ARRAY に設定します。

READONLY

このセクションへの書き込みが禁止されていることを示します。 コードエリアの場合はこれがデフォルトです。

READWRITE

このセクションに対する読み出しと書き込みが可能なことを示します。 データエリアの場合はこれがデフォルトです。

SECFLAGS=n

現在のセクションに ELF フラグを 1 つ以上(n で指定されます)追加します。

SECTYPE=n

現在のセクションの ELF 型を n に設定します。

STRINGS

現在のセクションに SHF_STRINGS フラグを追加します。 STRINGS 属性を使用するには、MERGE=1 属性も使用する必要があります。 セクションのコンテンツは、DCB ディレクティブを使用して NULL で終わる文字列である必要があります。

Show/hide使用法

AREA ディレクティブを使用して、ソースファイルを複数の ELF セクションに分割します。 複数の AREA ディレクティブで同じ名前を使用できます。 同じ名前の付いたエリアはすべて、同じ ELF セクションに配置されます。 特定の名前の付いた最初 AREA ディレクティブの属性だけが適用されます。

通常、コードとデータには別々の ELF セクションを使用する必要があります。 ただし、コードセクションにはデータを配置することができます。 大きなプログラムは、扱いやすいように複数のコードセクションに分割できます。 また、大きな独立データセットも別々のセクションに配置するのが適切です。

ローカルラベルの有効範囲は、AREA ディレクティブによって定義され、必要に応じて ROUT ディレクティブによって分割されます。

アセンブリには少なくとも 1 つの AREA ディレクティブが必要です。

Note

ディレクティブが PC 相対の式を使用していて、PREINIT_ARRAYFINI_ARRAY、または INIT_ARRAY ELF セクション内にある場合、アセンブラは DCD および DCDU ディレクティブの R_ARM_TARGET1 再配置を生成します。 各 DCD または DCDU ディレクティブの後で RELOC ディレクティブを使用して、再配置をオーバーライドできます。 この再配置を使用する場合、読み出し/書き込みセクションは、プラットフォー ABI が許可すれば、リンク時に読み出し専用セクションになります。

Show/hide

以下の例では、Example という名前の読み出し専用のコードセクションを定義します。

    AREA    Example,CODE,READONLY   ; コードセクションの例
            ; コード

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0489GJ
Non-ConfidentialID051612