gpt4 book ai didi

gcc - 为什么Seabios无法使用-fno-inline进行编译

转载 作者:行者123 更新时间:2023-12-02 10:48:33 26 4
gpt4 key购买 nike

我正在尝试以更可调试的状态编译seabios,因此我想取消函数内联。

为此,我在编译标志中添加了-fon-inline,但是随后出现编译错误:

 error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'  

这与以下代码有关:
asm volatile(
"calll __call16big_from32"
: "+a" (callregs), "+m" (*callregs)
:
: "ebx", "ecx", "edx", "esi", "edi", "cc", "memory");

我查看了此错误,发现这意味着编译器用完了寄存器,因此无法编译该asm语句。

问题是,如果没有-fon-inline,完全相同的代码也可以编译,为什么呢?

最佳答案

asm的第一个参数不能与第二个地址共享一个寄存器,因为第一个参数已修改。如果函数是内联的,则调用寄存器可能是常量或相对于堆栈指针的偏移量,因此不需要单独的寄存器。

给定volatile和“内存”的存在,并且没有对其的引用,可以删除第二个参数。

关于gcc - 为什么Seabios无法使用-fno-inline进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com