[11.0p6] Upgrade Emscripten to 5.0.6 & LLVM to 23 #129925
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR backports the WebAssembly toolchain upgrade to the 11.0p6 branch, moving the repo’s WASM build from Emscripten 3.1.56 / LLVM 19 to Emscripten 5.0.6 / LLVM 23, and updating related runtime, loader, packaging, tests, and CI wiring to match the new toolchain’s behavior (notably around wasm exception handling / exnref and pthread worker bootstrapping).
Changes:
- Upgrade Emscripten/LLVM and refresh the associated dependency versions, build flags, and pipeline container/images.
- Update the WASM JS loader / boot config generation to align with the newer Emscripten pthread model (no separate
dotnet.native.worker.mjs) and newer feature detection (exceptionsFinal). - Adjust Mono runtime/backend for LLVM 23 compatibility and add/enable regression coverage while updating test expectations/annotations and CI execution paths.
Reviewed changes
Copilot reviewed 92 out of 94 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/tests/Loader/classloader/MethodImpl/CovariantReturns/UnitTest/UnitTest_GVM_TypeLoadException.il | Remove Mono ActiveIssue gating |
| src/tests/JIT/Regression/JitBlue/WPF_3226/CSharpRepro/WPF_3226.cs | Remove Mono ActiveIssue gating |
| src/tests/JIT/Regression/JitBlue/Runtime_105619/Runtime_105619.cs | Remove MonoFULLAOT ActiveIssue gating |
| src/tests/JIT/Regression/CLR-x86-JIT/V1.1-M1-Beta1/b143840/b143840.il | Remove Mono ActiveIssue gating |
| src/tests/JIT/jit64/localloc/call/call05_small.il | Remove Mono ActiveIssue gating |
| src/tests/JIT/jit64/localloc/call/call05_large.il | Remove Mono ActiveIssue gating |
| src/tests/JIT/Directed/StructABI/StraddlingVtypeAbi.csproj | New directed test project |
| src/tests/JIT/Directed/StructABI/StraddlingVtypeAbi.cs | New regression test for gshared ABI |
| src/tests/JIT/Directed/nullabletypes/Desktop/boxunboxvaluetype.cs | Remove Mono ActiveIssue gating |
| src/tests/JIT/Directed/nullabletypes/castclassvaluetype.cs | Remove Mono ActiveIssue gating |
| src/tests/Common/CLRTest.Execute.Batch.targets | Add node exnref flag for wasm runs |
| src/tests/Common/CLRTest.Execute.Bash.targets | Add node exnref flag for wasm runs |
| src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/GenerateWasmBootJson.cs | Pass parsed TFM version into helper |
| src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/BootJsonData.cs | Keep jsModuleWorker for compat |
| src/tasks/Microsoft.NET.Sdk.WebAssembly.Pack.Tasks/BootJsonBuilderHelper.cs | Gate worker resource mapping by TFM |
| src/native/libs/Common/JavaScript/types/public-api.ts | Remove jsModuleWorker/threads behavior types |
| src/native/libs/Common/JavaScript/loader/dotnet.d.ts | Remove jsModuleWorker/threads behavior types |
| src/native/libs/Common/JavaScript/loader/config.ts | Drop worker resource normalization/merge |
| src/native/libs/Common/JavaScript/loader/bootstrap.ts | Switch to exceptionsFinal feature check |
| src/native/libs/Common/JavaScript/loader/assets.ts | Drop worker module asset plumbing |
| src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs | Stop expecting worker module file |
| src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs | Stop enumerating worker assets |
| src/mono/wasm/Wasm.Build.Tests/Common/BuildEnvironment.cs | MT pack availability check update |
| src/mono/wasm/Wasm.Build.Tests/Blazor/EventPipeDiagnosticsTests.cs | Remove Mono ActiveIssue gating |
| src/mono/wasm/build/WasmApp.Common.targets | Add multivalue/reference-types to wasm-opt |
| src/mono/sample/wasm/wasm.mk | Add exnref flag for sample runs |
| src/mono/sample/wasm/console-v8/Wasm.Console.V8.Sample.csproj | Add exnref engine arg |
| src/mono/sample/wasm/console-node/Wasm.Console.Node.Sample.csproj | Add exnref engine arg |
| src/mono/mono/offsets/x86_64-none-linux-android.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/x86_64-apple-maccatalyst.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/x86_64-apple-darwin10.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/wasm32-unknown-wasip2.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/wasm32-unknown-none.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/i686-none-linux-android.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/armv7-none-linux-androideabi.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/aarch64-v8a-linux-android.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/aarch64-apple-maccatalyst.h | Update TLS struct offsets/sizes |
| src/mono/mono/offsets/aarch64-apple-darwin10.h | Update TLS struct offsets/sizes |
| src/mono/mono/mini/mini-runtime.h | Remove raw exception ptr field |
| src/mono/mono/mini/mini-llvm.c | Remove NaN-safe narrowing helper path |
| src/mono/mono/mini/mini-exceptions.c | Root exception across resumes via GCHandle |
| src/mono/mono/mini/mini-amd64.c | ABI fix for straddling <=16B vtypes |
| src/mono/mono/mini/method-to-ir.c | AOT tailcall + typeload error handling tweaks |
| src/mono/mono/mini/iltests.il | Remove FULLAOT category annotation |
| src/mono/mono/mini/CMakeLists.txt | Set wasm EH legacy exceptions flags |
| src/mono/mono/mini/aot-compiler.c | Marshal recursion guard + CLASS embedding support |
| src/mono/mono/metadata/memory-manager.c | Chunk size calc alignment adjustment |
| src/mono/mono/metadata/assembly-load-context.c | Add TLS recursion guard for resolve hooks |
| src/mono/mono/eventpipe/ep-rt-mono-runtime-provider.c | Clamp sampler recompute on coarse timers |
| src/mono/mono.proj | Update emscripten python pack path |
| src/mono/CMakeLists.txt | Enforce LLVM API 2300 + update lib lists |
| src/mono/browser/runtime/types/internal.ts | Rename EH feature/loader helper fields |
| src/mono/browser/runtime/types/index.ts | Remove worker asset types/behaviors |
| src/mono/browser/runtime/startup.ts | Use exceptionsFinal feature flag, worker init |
| src/mono/browser/runtime/pthreads/ui-thread.ts | Allocate worker from main script URL |
| src/mono/browser/runtime/loader/run.ts | Worker bootstraps via main module; dispatch load |
| src/mono/browser/runtime/loader/globals.ts | Update sidecar detection + feature detect wiring |
| src/mono/browser/runtime/loader/config.ts | Remove threads asset behavior mapping |
| src/mono/browser/runtime/loader/assets.ts | Drop worker module asset handling; preload via script |
| src/mono/browser/runtime/jiterpreter-support.ts | Add try_table/tag index support for EH |
| src/mono/browser/runtime/jiterpreter-opcodes.ts | Update opcode enum for exnref EH |
| src/mono/browser/runtime/jiterpreter-jit-call.ts | Use try_table-based EH wrapper |
| src/mono/browser/runtime/dotnet.d.ts | Remove worker asset types/behaviors |
| src/mono/browser/runtime/CMakeLists.txt | Link selected EH static lib + wasm-opt flags |
| src/mono/browser/runtime/assets.ts | Remove threads behavior in instantiation |
| src/mono/browser/emscripten-version.txt | Bump emscripten version to 5.0.6 |
| src/mono/browser/build/BrowserWasmApp.targets | Add exnref flags; stop copying worker module |
| src/mono/browser/build/BrowserWasmApp.CoreCLR.targets | Add legacy exceptions flag |
| src/mono/browser/browser.proj | Add EH lib selection + remove worker module copy |
| src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/FileInfo/GetSetTimes.cs | Refactor temporal-resolution tests |
| src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/File/GetSetTimes.cs | Remove browser ActiveIssue; update conditions |
| src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/File/Copy.cs | Remove browser-specific time check carve-out |
| src/libraries/System.Runtime/tests/System.IO.FileSystem.Tests/Base/BaseGetSetTimes.cs | New temporal-resolution model flags |
| src/libraries/System.Private.CoreLib/src/System/IO/FileStatus.Unix.cs | Remove browser/wasi futimens special case |
| src/installer/pkg/sfx/Microsoft.NETCore.App/Directory.Build.props | Remove worker module from manifest |
| global.json | Update arcade/helix/sdk versions |
| eng/Versions.props | Bump EmsdkVersion to 5.0.6 |
| eng/Version.Details.xml | Refresh dependency versions (LLVM/Arcade/etc.) |
| eng/Version.Details.props | Refresh dependency versions (LLVM/Arcade/etc.) |
| eng/testing/WasmRunnerTemplate.sh | Add exnref to default JS engine args |
| eng/testing/WasmRunnerTemplate.cmd | Add exnref to default JS engine args |
| eng/testing/tests.browser.targets | Stop tracking/copying worker module asset |
| eng/testing/linker/trimmingTests.targets | Add SkipTrimmingTestsRun gate |
| eng/testing/BrowserVersions.props | Bump V8 versions |
| eng/pipelines/runtime.yml | Disable WasmTestOnV8 scenario (commented) |
| eng/pipelines/runtime-llvm.yml | Expand PR path filters for LLVM pipeline |
| eng/pipelines/runtime-linker-tests.yml | Skip trimming run on V8; keep publish coverage |
| eng/pipelines/performance/runtime-wasm-perf.yml | Disable PR runs due to V8 exnref mismatch |
| eng/pipelines/common/templates/wasm-runtime-tests.yml | Disable sending runtime tests to Helix on V8 |
| eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml | Add compile-time sendToHelix switch |
| eng/pipelines/common/templates/pipeline-with-resources.yml | Update webassembly container digests |
| eng/native/tryrun.browser.cmake | Update tryrun cache version to 5.0.6 |
| eng/native/configureplatform.cmake | Update browser wasm flags/libs for EH |
| eng/liveBuilds.targets | Remove worker module from livebuild runtime files |
maraf
approved these changes
Jun 27, 2026
This was referenced Jun 27, 2026
Member
Author
|
/ba-g unrelated test failure on Windows |
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.
Backport of #129299