最近、私はいくつかの低レベルの作業をデバッグしようとしましたが、コンパイラのcrt0.S
が見つかりませんでした( avr-gcc )が、crt1.S
(対応する.o
ファイルについても同じです)。
これら2つのファイルの違いは何ですか? crt1
はまったく違うものですか、それとも何ですか?どちらも「ブートストラップ」(stack frame
の設定など)に関係しているようですが、なぜその違いがあるのでしょうか。
両方のcrt0/crt1は同じことを行い、基本的にmain()を呼び出す前に必要なことを行います(スタックの初期化、irqの設定など)。どちらか一方にリンクする必要がありますが、両方にリンクすることはできません。それらは実際にはライブラリではなく、実際にはインラインアセンブリコードです。
私の知る限り、crtには2つの「フレーバー」があります