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