Я просматривал исходники различных реализаций setjmp
и longjmp
и заметил, что не все регистры ЦП сохраняются в структуре jmp_buf
. Изучив ABI AMD64, я заметил, что сохраняются только регистры вызываемого абонента -.
Я не понимаю, как можно полностью восстановить состояние функции, когда сохранена только часть регистров. Несомненно, несохраненные регистры должны были быть затерты много раз снова и снова, пока я не позвоню позже longjmp
?
Однако все работает отлично, поэтому я определенно чего-то не понимаю. Я надеялся, что кто-то может пролить свет на это.
Спасибо!