Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix hardware exception context extraction on Rosetta #107188

Merged

Commits on Aug 30, 2024

  1. Fix hardware exception context extraction on Rosetta

    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.
    janvorli committed Aug 30, 2024
    Configuration menu
    Copy the full SHA
    b9e5f6b View commit details
    Browse the repository at this point in the history