第 2 段階の初期化ファイル - 2022.1 日本語

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

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

C 標準に従い、すべてのグローバルおよびスタティック変数は 0 に初期化する必要があります。これは上記すべての CRT に必要な共通の機能です。このため、別のルーチン _crtinit が呼び出されます。_crtinit ルーチンは、プログラムの .bss セクションのメモリを初期化します。_crtinit ルーチンはラッパー ファイルでもあり、main プロシージャも呼び出します。main プロシージャを呼び出す前に、ほかの初期化関数が呼び出される場合もあります。_crtinit ルーチンは、次のスタートアップ ファイルにより提供されます。

crtinit.o

このデフォルトの第 2 段階の C スタートアップ ファイルは、次の処理を実行します。

  1. .bss セクションを 0 にクリアします。
  2. _program_init を呼び出します。
  3. コンストラクター関数 (_init) を呼び出します。
  4. main プロシージャの引数を設定し、main を呼び出します。
  5. デストラクタ関数 (_fini) を呼び出します。
  6. _program_clean を呼び出し、返します。
pgcrtinit.o

これはプロファイルの作成時に使用され、次の処理を実行します。

  1. .bss セクションを 0 にクリアします。
  2. _program_init を呼び出します。
  3. _profile_init を呼び出し、プロファイル ライブラリを初期化します。
  4. コンストラクター関数 (_init) を呼び出します。
  5. main プロシージャの引数を設定し、main を呼び出します。
  6. デストラクタ関数 (_fini) を呼び出します。
  7. _profile_clean を呼び出し、プロファイル ライブラリをクリーンアップします。
  8. _program_clean を呼び出し、返します。
sim-crtinit.o

コンパイラで -mno-clearbss オプションが設定されている場合に使用され、次の処理を実行します。

  1. _program_init を呼び出します。
  2. コンストラクター関数 (_init) を呼び出します。
  3. main プロシージャの引数を設定し、main を呼び出します。
  4. デストラクタ関数 (_fini) を呼び出します。
  5. _program_clean を呼び出し、返します。
sim-pgcrtinit.o

プロファイルの作成時に、コンパイラで -mno-clearbss オプションが設定されている場合に使用され、次の処理を実行します。

  1. _program_init を呼び出します。
  2. _profile_init を呼び出し、プロファイル ライブラリを初期化します。
  3. コンストラクター関数 (_init) を呼び出します。
  4. main プロシージャの引数を設定し、呼び出します。
  5. デストラクタ関数 (_fini) を呼び出します。
  6. _profile_clean を呼び出し、プロファイル ライブラリをクリーンアップします。
  7. _program_clean を呼び出し、返します。