setjmp
さまざまな実装のソースを閲覧してlongjmp
いて、すべての CPU レジスタが構造体に保存されているわけではないことに気付きましたjmp_buf
。AMD64 ABI を確認した後、callee-saved レジスターのみが保存されていることに気付きました。
一部のレジスタのみが保存されている場合に、関数の状態を完全に再開する方法がわかりません。確かに、保存されていないレジスタは、後で呼び出すまで何度も何度も上書きされたに違いありませんlongjmp
か?
しかし、すべてが完璧に機能するので、私には理解できないことがあります。誰かがこれに光を当てることができることを望んでいました。
ありがとう!