-
crt0.o
- This initialization file is used for programs which are to be executed in
standalone mode, without the use of any bootloader or debugging stub. This CRT
populates the reset, interrupt, exception, and hardware exception vectors and
invokes the second stage startup routine
_crtinit
. On returning
from _crtinit
, it ends the program by infinitely looping in the
_exit
label.
-
crt1.o
- This initialization file is used when the application is debugged in a
software-intrusive manner. It populates all the vectors except the breakpoint
and reset vectors and transfers control to the second-stage
_crtinit
startup routine.
-
crt2.o
- This initialization file is used when the executable is loaded using a
bootloader. It populates all the vectors except the reset vector and transfers
control to the second-stage
_crtinit
startup routine. On
returning from _crtinit
, it ends the program by infinitely
looping at the _exit
label. Because the reset vector is not
populated, on a processor reset, control is transferred to the bootloader, which
can reload and restart the program.
-
crt3.o
- This initialization file is employed when the executable does not use any
vectors and wishes to reduce code size. It populates only the reset vector and
transfers control to the second stage
_crtinit
startup routine.
On returning from _crtinit
, it ends the program by infinitely
looping at the _exit
label. Because the other vectors are not
populated, the GNU linking mechanism does not pull in any of the interrupt and
exception handling related routines, thus saving code space.