最近は12ステップ組み込みOS本に取り組んでいます。
知らなかった概念が続々登場してくるので都度調べているのですが、理解に時間がかかった用語の紹介を一つします。
「スタートアップルーチン」というもので、どうもLinux(汎用OS)のC言語界隈と組み込み界隈で言葉の定義が微妙に違う気がします。
C言語界隈の記事
https://tanakamura.github.io/pllp/docs/linker.html
組み込み界隈の記事
https://interface.cqpub.co.jp/wp-content/uploads/interface/2012/09/if09_093.pdf
そもそもスタートアップルーチンという言葉はC言語の言葉であり、main関数が呼び出される前の処理、main関数を呼び出して関数の終了をさせるもの、のように見えます。
ld(リンカー)コマンドで生成されたELFファイルは_startというラベルから実行されるようです。
組み込みでスタートアップルーチンと言う場合、CPUのリセット直後に行う処理でRAMやSPの初期化をしてmain関数に遷移するもの、として捉えられているようです。C言語の定義に加えて初期化処理が加わっています。また呼ばれるのもELFファイルの実行時ではなくリセット時という認識に見えます。組み込みでは複数のELFファイルを同時に動かすことが(あまり)ないことからこのような定義になっているのではないかと思います。
また実行開始位置は_startラベルとは限らず、各CPU毎に微妙に異なるラベルから始まるようです。(SH-7750だと:start LPC2388だと_startup:等)
間違っていたらどなたかコメントで指摘していただけると嬉しいです。