実行ファイルは、オブジェクト ファイル (.o
ファイル) の入力セクションをリンクして作成します。デフォルトでは、標準であり明確に定義されたセクションからコンパイラがコードを作成します。各セクションには、その意味および目的に応じて名前が付けられています。オブジェクト ファイルのさまざまな標準セクションを次の表に示します。
これらのセクションに加え、カスタム セクションを作成して、メモリに割り当てることもできます。
セクション | 詳細 |
---|---|
.text | テキスト セクション |
.rodata | 読み出し専用データのセクション |
.sdata2 | 読み出し専用の小さなデータのセクション |
.sbss2 | 読み出し専用の初期化されていないデータのセクション |
.data | 読み出し/書き込みデータのセクション |
.sdata | 読み出し/書き込みの小さなデータのセクション |
.sbss | 初期化されていない小さなデータのセクション |
.bss | 初期化されてないデータのセクション |
.heap | プログラム ヒープ メモリのセクション |
.stack | プログラム スタック メモリのセクション |
.init
、.fini
、.ctors
、.dtors
、.got
、.got2
、.eh_frame
など、通常は変更しない予約済みセクションもあります。
-
.text
- オブジェクト ファイルのこのセクションには実行可能なプログラム命令が含まれており、
x
(実行コード)、r
(読み出し専用)、およびi
(初期化) フラグが付けられています。プロセッサ命令バスでアドレス指定可能な初期化済み ROM に割り当てることができます。 -
.rodata
- このセクションには読み出し専用データが含まれており、
r
(読み出し専用) およびi
(初期化) フラグが付けられています。.text
セクションと同様、プロセッサ命令バスでアドレス指定可能な初期化済み ROM に割り当てることができます。 -
.sdata2
-
.rodata
セクションと同様ですが、8 バイト未満のサイズの小さい読み出し専用データが含まれます。このセクションのデータには、すべて読み出し専用のスモール データ アンカーへの参照を使用してアクセスします。これにより、このセクションのすべてのデータに 1 つの命令でアクセスできます。このセクションに配置するデータのサイズは、-G
オプションで変更できます。r
(読み出し専用) およびi
(初期化) フラグが付けられています。 -
.data
- このセクションには読み出し/書き込みデータが含まれており、
w
(読み出し/書き込み) およびi
(初期化) フラグが付けられています。初期化済みの RAM にマップする必要があります。ROM にはマップできません。 -
.sdata
- このセクションには、8 バイトよりも小さい読み出し/書き込み可能なデータが含まれます。このセクションに配置するデータのサイズは、
-G
オプションで変更できます。このセクションのデータには、すべて読み出し/書き込みのスモール データ アンカーへの参照を使用してアクセスします。これにより、このセクションのすべてのデータに 1 つの命令でアクセスできます。w
(読み出し/書き込み) およびi
(初期化) フラグが付けられており、初期化済み RAM にマップする必要があります。 -
.sbss2
- このセクションには、8 バイトよりも小さい読み出し専用の初期化されないデータが含まれます。このセクションに配置するデータのサイズは、
-G
オプションで変更できます。r
(読み出し) フラグが付けられており、ROM にマップする必要があります。 -
.sbss
- このセクションには、8 バイトよりも小さい初期化されないデータが含まれます。このセクションに配置するデータのサイズは、
-G
オプションで変更できます。w
(読み出し/書き込み) フラグが付けられており、RAM にマップする必要があります。 -
.bss
- このセクションには、初期化されていないデータが含まれます。
w
(読み出し/書き込み) フラグが付けられており、RAM にマップする必要があります。 -
.heap
- このセクションには、グローバル プログラム ヒープとして使用される初期化されていないデータが含まれます。このセクションのメモリは、ダイナミック メモリ割り当てルーチンにより割り当てられます。RAM にマップする必要があります。
-
.stack
- このセクションには、プログラム スタックとして使用される初期化されていないデータが含まれます。RAM にマップする必要があります。通常は、
.heap
セクションのすぐ後に配置されます。リンカーによっては、.stack
と.heap
セクションが.bss_stack
というセクションにマージされているように見えます。 -
.init
- このセクションには言語初期化コードが含まれており、
.text
セクションと同じフラグが付けられています。初期化済みの ROM にマップする必要があります。 -
.fini
- このセクションには言語クリーンアップ コードが含まれており、
.text
セクションと同じフラグが付けられています。初期化済みの ROM にマップする必要があります。 -
.ctors
- このセクションにはプログラムの起動時に呼び出す必要のある関数がリストされており、
.data
と同じフラグが付けられています。初期化済みの RAM にマップする必要があります。 -
.dtors
- このセクションにはプログラムの終了時に呼び出す必要のある関数がリストされており、
.data
と同じフラグが付けられています。初期化済みの RAM にマップする必要があります。 -
.got2/.got
- このセクションにはプログラム データへのポインターが含まれており、
.data
と同じフラグが付けられています。初期化済みの RAM にマップする必要があります。 -
.eh_frame
- このセクションには、例外処理用のフレーム巻き戻し情報が含まれます。このセクションには、
.rodata
と同じフラグが付けられており、初期化済みの ROM にマップできます。 -
.tbss
- このセクションには、初期化されないスレッドのローカル データが含まれており、このデータはプログラムのメモリ イメージの一部になります。このセクションには、
.bss
と同じフラグが付けられており、RAM にマップする必要があります。 -
.tdata
- このセクションには、初期化されたスレッドのローカル データが含まれており、このデータはプログラムのメモリ イメージの一部になります。初期化済みの RAM にマップする必要があります。
-
.gcc_except_table
- このセクションには、言語特定のデータが含まれています。初期化済みの RAM にマップする必要があります。
-
.jcr
- このセクションには、コンパイルされた Java クラスを登録するために必要な情報が含まれています。内容はコンパイラに特化したもので、コンパイラ初期化関数が使用します。初期化済みの RAM にマップする必要があります。
-
.fixup
- このセクションにはフィックスアップ ページ テーブルやフィックスアップ レコード テーブルを実行するために必要な情報が含まれています。初期化済みの RAM にマップする必要があります。