Repository navigation
Rebuild PE32 SEH state and EH4 nonlocal continuations - #1086
Merged
Merged
Conversation
gmh5225
marked this pull request as ready for review
October 15, 2026 21:24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PE32 functions can now retain a live jump buffer across a proved private helper call, call ordinary code under multiple checked SEH states, and rebuild EH4 nonlocal transfers with the original cookie protocol.
Keep one source body and its PHI edges while projecting the checked physical scope selector into LLVM's inherited-call contract. A shared COFF binder validates exact source receipts. Private helper graphs must have immutable code, zero cleanup, no stack arguments or object borrow, and checked image effects; caller-frame lifetime and result provenance remain independent obligations.
EH4 capture authenticates the load-config cookie address, encoded scope table, third unwind argument and physical capture PC. The state solver protects all eleven initialized buffer words, separates callback scratch from the establisher, and follows the CRT's -2 unwind sentinel. Distinct EH3/EH4 native bridges preserve the original unwind helper. Tests cover GS/no-GS, finally/filter transfers, zero-value normalization, retired scopes, corrupted cookies, buffer overlap and forged source/IR contracts.
The LLVM gitlink and all three r6 package hashes refer to main commit 06788fb19109851e6a6b9f109a2b8027a606f0c6. The Linux package passed 53 LLVM RUN lines; each platform's archive, BUILDINFO and dynamic-call interface were checked. Release https://github.com/NeverSight/llvm-project/releases/tag/neverd-llvm-v23.0.0-r6 is published, and the release workflow completed successfully. Public asset digests match the validated artifacts.
Validation:
The dev integration also fixes three missing Python Local Types ABI declarations and reuses an ancestor-owned zlib CMake target. The integrated rebuild and all 12 C++ targets passed; all 90 scenarios also passed another 1,800 Wine executions after integration. The ARM32 PE/Wine workflow is queued at https://github.com/NeverSight/NeverD/actions/runs/38808157470. Multi-state capture, suspended-finally handler transfers, borrowed EH4 helper buffers and remaining C++ lifetime protocols still require separate proofs.