为什么uboot的入口点(Start.S)是用汇编写的?是出于性能原因还是有其他问题。为什么它不是用 C 语言编写的?
最佳答案
除非保证入口点的初始状态符合 C 编译器使用的 ABI 中 C 函数调用的形式,否则 C 无法表达入口点。如果寄存器中存在任何相关状态,则这可能会 (1) 对于调用破坏的寄存器,可能会被编译器生成的任何序言代码破坏,并且 (2) 即使寄存器是调用保存的,编译器也可能会移动它们即使 C 代码可以访问内联汇编扩展,也不会暴露给 C 代码。 (附注:uClibc 对某些架构的 setjmp
实现在这方面存在错误;它错误地使用内联 asm 而不是 asm 函数编写,并且假设编译器没有修改/移动调用 -当到达内联汇编时,已经保存了寄存器。)许多入口点(例如 ELF 二进制文件)也具有以 C 无法表示的方式定位在堆栈上的初始状态。
关于c - 为什么uboot的入口文件是用汇编写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22321887/