Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix hardware exception context extraction on Rosetta (dotnet#107188)
The recently added AVX support in hardware exception handling path on macOS x64 has introduced a problem when running under Rosetta. When we extract the floating point part of the context of the failing thread, the thread can have AVX or AVX512 active, or none of these. The code accidentally leaves CONTEXT_XSTATE set on the context even when no AVX was enabled on the thread. Rosetta doesn't support AVX, so having CONTEXT_XSTATE set in the context flags can lead to later call to RtlRestoreContext attempting to set ymm registers using instructions that Rosetta cannot emulate and the app crashes due to that. This doesn't happen in .NET 9, since we always clear the CONTEXT_XSTATE before exception handling stack unwinding. But in .NET 8, this causes stack overflow under Rosetta, since the attemt to execute the ymm instruction triggers the hardware exception handling again and again.
- Loading branch information