为什么setjmp(3)不能保存AMD64上的所有寄存器?

has*_*ste 7 x86-64 longjmp

我正在浏览各种setjmplongjmp实现的来源,并注意到并非所有的CPU寄存器都保存在jmp_buf结构中.在查看AMD64 ABI之后,我注意到只保存了被调用者保存的寄存器.

我不明白当只保存了一些寄存器时,如何完全恢复功能状态.当然,未保存的寄存器必须反复多次破坏,直到我longjmp稍后再打电话为止?

然而,一切都很完美,所以肯定有一些我不明白的东西.我希望有人可以对此有所了解.

谢谢!

dus*_*uff 5

setjmp函数是与其他函数一样的函数,因此可以假定该函数破坏了所有调用方保存的寄存器。因此,不需要保存/恢复这些寄存器。