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

时间:2012-07-01 20:25:42

标签: x86-64 longjmp

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:4)

setjmp函数是一个与其他函数类似的函数,因此可以假设它会破坏任何调用者保存的寄存器。因此,没有必要保存/恢复这些寄存器。