Почему setjmp (3 )не сохраняет все регистры на AMD64?

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

Я не понимаю, как можно полностью восстановить состояние функции, когда сохранена только часть регистров. Несомненно, несохраненные регистры должны были быть затерты много раз снова и снова, пока я не позвоню позже longjmp?

Однако все работает отлично, поэтому я определенно чего-то не понимаю. Я надеялся, что кто-то может пролить свет на это.

Спасибо!

7
задан haste 1 July 2012 в 20:25
поделиться