オブジェクト ファイルのセクション - 2022.1 日本語

Vitis 統合ソフトウェア プラットフォームの資料: エンベデッド ソフトウェア開発 (UG1400)

Document ID
UG1400
Release Date
2022-04-26
Version
2022.1 日本語

実行ファイルは、オブジェクト ファイル (.o ファイル) の入力セクションをリンクして作成します。デフォルトでは、標準であり明確に定義されたセクションからコンパイラがコードを作成します。各セクションには、その意味および目的に応じて名前が付けられています。オブジェクト ファイルのさまざまな標準セクションを次の表に示します。

これらのセクションに加え、カスタム セクションを作成して、メモリに割り当てることもできます。

表 1. オブジェクト (実行) ファイルのセクション レイアウト
セクション 詳細
.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 にマップする必要があります。