Test SjLj across C++ noexcept boundaries#925
Closed
brandonpayton wants to merge 1 commit into
Closed
Conversation
This was referenced Jul 13, 2026
Member
Author
|
Closing this issue-#918 follow-up because its raw and instrumented SjLj/noexcept controls, positive SIGCHLD fixture, browser coverage, and SDK limitation documentation are now carried by #934 at exact green head |
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.
What this follows up
#907 already landed the Dinit production and package workaround that lets a
normal
SIGCHLDservice exit reach Dinit's existing handler without aborting.This PR does not replay that fix. It keeps the useful test and documentation
work from closed #911 and links it to #918.
What remains here
siglongjmpcrosses a C++noexceptframe.after Kandelo instrumentation.
does not cross
noexcept.SIGCHLDfixture proves the handler can jump back frompselectand reap a clean child.
control, and the SDK guide explains the narrow toolchain limitation.
The failure controls deliberately expect the current
SIGABRT. When thetoolchain is fixed, they should fail clearly and tell us to update the SDK
documentation and expected behavior together.
What was deliberately removed
This leaves out the Dinit patches, Dinit package revision changes, service
fixtures, and production changes from #911 that are already on
mainthrough#907. It also avoids rebuilding or republishing Dinit.
ABI and package impact
There is no ABI change. ABI 39, the ABI snapshot, generated bindings, syscall
behavior, and fork metadata are unchanged. There is no package revision,
published package artifact, binary index, or VFS image change. The build script
only emits raw Wasm controls under the local test-fixture directory.
Validation
Run inside
scripts/dev-shell.sh:bash -n scripts/build-programs.shscripts/build-programs.shand rootfs buildscd host && npx vitest run test/sjlj-noexcept-boundary.test.ts: 6 passedcd host && npm run typecheck: passedbash scripts/ci-check-browser-assets.sh: 92 imports resolvedbash scripts/check-abi-version.sh: passedbash scripts/ci-run-test-suite.sh fork-instrument: passedbash scripts/ci-run-test-suite.sh vitest: 1,379 passed, 2 expectedfailures, 26 skipped; Bun teardown also passed
4 did not run, and 1 unrelated nginx demo failed because
nginx-vfs.vfs.zstwas not built in this local staging workspacescripts/fetch-binaries.sh --fetch-only: resolved 71 of 79 packages, thenreported the eight unpublished packages already missing from this checkout
GitHub Actions is green:
fork-instrument, libc, POSIX, Sortix, and Vitest suites plus the merge gates.
Chromium. The exact fixture passed locally, and the browser-job rerun passed
without a code change.
Not run locally:
./run.sh browseror the full libc/POSIX/Sortix suites.Those conformance suites did run and pass in CI. Package rebuilds and
performance benchmarks were not run. This change does not alter runtime
semantics, the ABI, or package outputs, and it makes no performance claim.
Tracks #918.