c - 为什么uboot的入口文件是用汇编写的?

标签 c u-boot

为什么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/

相关文章:

C Unix 管道示例

c - 可以采用大于 255 个字符的路径的 Windows 全路径 API 的替代方案!

java - C客户端与Java服务器通信错误

c - 将 ext2 super block 读入 ext2_super_block 结构问题

console - 为什么 U-Boot 不禁用控制台输出

c - C 中 printf() 的意外行为

linux-kernel - Linux : boot arguments with U-Boot and Flat Image Tree (FIT)

linux - Linux系统只读Initramfs

linux - 从 U-boot shell 模式写入 NVRAM

linux-kernel - 基于 BBB DT 的方法