Repository navigation
[release/10.0] Fix native EH in external shared libs on macOS - #131434
Merged
Merged
Conversation
There is an exception-handling issue on macOS when throwing and catching some standard C++ exceptions in a native C++ lib. The hosts (dotnet, apphost, corerun, nethost) get local copies of typeinfo for several of these exceptions and these copies are not hidden. When an external shared library is loaded, the linker resolves references to those typeinfo instances to the local copies in the host instead of the ones in the libc++. That results in failures matching these exception types in c++ catch. The fix is to disable exporting symbols from these hosts (except for the _get_hostfxr_path from the nethost, which is needed)
|
Azure Pipelines: Successfully started running 3 pipeline(s). 13 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Member
|
Hi, the code complete date for 10.0.12 (the September 2026 release) is Monday 10 August. Make sure to merge this PR on that date at the latest, or it won't make it into that release. As a reminder, if this is a product change, you also need Tactics approval before merging this PR (test-only or infra-only changes don't require Tactics approval). |
jkotas
approved these changes
Aug 7, 2026
Member
|
/ba-g all failures are known |
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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 #130693 to release/10.0
/cc @janvorli
Customer Impact
There is an exception-handling issue on macOS when throwing and catching some standard C++ exceptions in a native C++ lib. When customer pinvokes into a shared library that uses C++ exception handling internally and throws / catches standard c++ exceptions like
std::out_of_rangeand others, it can fail to catch those. Even though the exception stays within the confines of the native code of the shared library.The hosts (dotnet, apphost, corerun, nethost) get local copies of typeinfo for several of these exceptions and these copies are not hidden. When an external shared library is loaded, the linker resolves references to those typeinfo instances to the local copies in the host instead of the ones in the libc++. That results in failures matching these exception types in c++ catch.
Regression
Testing
Directed test shared by the customer, CI testing, local coreclr and libraries tests.
Risk
Low, it just prevents exporting symbols from hosts (except of
_GetCurrentClrDetailsfrom corerun). Those symbols are not needed for anything.