1
더 디버깅 가능한 상태로 seabios를 컴파일하려고하므로 인라인 함수를 취소하고 싶습니다.왜 cant seabios가 -fno-inline으로 컴파일합니까
이렇게하려면, 나는 -fon 인라인 컴파일 플래그를 추가했지만 그때 컴파일 오류가 발생합니다 :
asm volatile(
"calll __call16big_from32"
: "+a" (callregs), "+m" (*callregs)
:
: "ebx", "ecx", "edx", "esi", "edi", "cc", "memory");
I : 다음 코드에 complaning됩니다
error: can't find a register in class 'GENERAL_REGS' while reloading 'asm'
이 오류를 보았는데 컴파일러가 레지스터를 다 써 버렸기 때문에 asm 문을 컴파일 할 수 없다는 것을 알게되었습니다.
사실 똑같은 코드가 -fon-inline없이 잘 컴파일됩니다. 그 이유는 무엇입니까?
하지만 callregs가 부모 함수에서 esp (또는 상수, 나는 그게 중요하지 않음)로부터의 오프셋 인 경우,이 함수에도 인수로 전달되어야하므로 여전히 그대로 유지됩니다. esp로부터의 오프셋, 그리고 추가 레지스터가 필요하지 않습니다. – buc030