标签: x86-64 longjmp
我正在浏览各种setjmp和longjmp实现的来源,并注意到并非所有CPU寄存器都保存在jmp_buf结构中。在查看AMD64 ABI之后,我注意到只保存了被调用者保存的寄存器。
setjmp
longjmp
jmp_buf
我不明白当只保存了一些寄存器时,如何完全恢复功能状态。肯定未被保存的寄存器必须反复多次被破坏,直到我稍后再打电话给longjmp?
谢谢!
答案 0 :(得分:4)
setjmp函数是一个与其他函数类似的函数,因此可以假设它会破坏任何调用者保存的寄存器。因此,没有必要保存/恢复这些寄存器。