最近我一直在尝试调试一些低级工作,但找不到crt0.S
对于编译器(avr-gcc https://linux.die.net/man/1/avr-gcc)但我确实找到了crt1.S
(与相应的.o
files).
这两个文件有什么区别?是crt1
完全不同的东西还是什么?它们似乎都与“引导”有关(设置stack frame
等等),但是为什么有这样的区别呢?
crt0/crt1 都做同样的事情,基本上做调用 main() 之前需要做的事情(比如初始化堆栈、设置 irqs 等)。您应该链接其中之一,但不能同时链接两者。它们不是真正的库,而是真正的内联汇编代码。
据我了解,crt有两种“口味”
-
crt1用于支持构造函数和析构函数(在 main 和 exit 之前和之后调用的函数)的系统。在这种情况下,main 被视为正常的函数调用。
-
crt0用于不支持构造函数/析构函数的系统。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)