C 標準に従い、すべてのグローバルおよびスタティック変数は 0 に初期化する必要があります。これは上記すべての CRT に必要な共通の機能です。このため、別のルーチン _crtinit
が呼び出されます。_crtinit
ルーチンは、プログラムの .bss
セクションのメモリを初期化します。_crtinit
ルーチンはラッパー ファイルでもあり、main プロシージャも呼び出します。main プロシージャを呼び出す前に、ほかの初期化関数が呼び出される場合もあります。_crtinit
ルーチンは、次のスタートアップ ファイルにより提供されます。
- crtinit.o
-
このデフォルトの第 2 段階の C スタートアップ ファイルは、次の処理を実行します。
-
.bss
セクションを 0 にクリアします。 -
_program_init
を呼び出します。 - コンストラクター関数 (
_init
) を呼び出します。 - main プロシージャの引数を設定し、main を呼び出します。
- デストラクタ関数 (
_fini
) を呼び出します。 -
_program_clean
を呼び出し、返します。
-
- pgcrtinit.o
-
これはプロファイルの作成時に使用され、次の処理を実行します。
-
.bss
セクションを 0 にクリアします。 -
_program_init
を呼び出します。 -
_profile_init
を呼び出し、プロファイル ライブラリを初期化します。 - コンストラクター関数 (
_init
) を呼び出します。 - main プロシージャの引数を設定し、main を呼び出します。
- デストラクタ関数 (
_fini
) を呼び出します。 -
_profile_clean
を呼び出し、プロファイル ライブラリをクリーンアップします。 -
_program_clean
を呼び出し、返します。
-
- sim-crtinit.o
-
コンパイラで
-mno-clearbss
オプションが設定されている場合に使用され、次の処理を実行します。-
_program_init
を呼び出します。 - コンストラクター関数 (
_init
) を呼び出します。 - main プロシージャの引数を設定し、main を呼び出します。
- デストラクタ関数 (
_fini
) を呼び出します。 -
_program_clean
を呼び出し、返します。
-
- sim-pgcrtinit.o
-
プロファイルの作成時に、コンパイラで
-mno-clearbss
オプションが設定されている場合に使用され、次の処理を実行します。-
_program_init
を呼び出します。 -
_profile_init
を呼び出し、プロファイル ライブラリを初期化します。 - コンストラクター関数 (
_init
) を呼び出します。 - main プロシージャの引数を設定し、呼び出します。
- デストラクタ関数 (
_fini
) を呼び出します。 -
_profile_clean
を呼び出し、プロファイル ライブラリをクリーンアップします。 -
_program_clean
を呼び出し、返します。
-