crt0.o y crt1.o-¿Cuál es la diferencia?
gcc linker (1)
Ambos crt0 / crt1 hacen lo mismo, básicamente hacen lo que se necesita antes de llamar a main () (como la inicialización de la pila, la configuración de irqs, etc.). Debes enlazar con uno u otro, pero no con ambos. No son realmente bibliotecas, sino código ensamblador en línea.
Por lo que yo entiendo, crt viene en dos "sabores"
- crt1 se usa en sistemas que admiten constructores y destructores (funciones llamadas antes y después de main y exit). En este caso, main se trata como una llamada de función normal.
- crt0 se usa en sistemas que no admiten constructores / destructores.
Recientemente he estado intentando depurar algún trabajo de bajo nivel y no pude encontrar el crt0.S
para el compilador ( avr-gcc ), pero encontré un crt1.S
(y lo mismo con los archivos .o
correspondientes).
¿Cuál es la diferencia entre estos dos archivos? ¿Es crt1
algo completamente diferente o qué? Ambos parecen tener algo que ver con ''bootstrapping'' (configuración del stack frame
y demás), pero ¿por qué la distinción?