ntdll: Preserve untouched parts of xstate in NtSetContextThread().
This commit is contained in:
parent
7ae23ad775
commit
a10da8a42a
2 changed files with 4 additions and 0 deletions
|
@ -1004,9 +1004,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
|
|||
{
|
||||
CONTEXT_EX *context_ex = (CONTEXT_EX *)(context + 1);
|
||||
XSAVE_AREA_HEADER *xs = (XSAVE_AREA_HEADER *)((char *)context_ex + context_ex->XState.Offset);
|
||||
UINT64 mask = frame->xstate.Mask;
|
||||
|
||||
if (xstate_compaction_enabled) frame->xstate.CompactionMask |= xstate_extended_features();
|
||||
copy_xstate( &frame->xstate, xs, xs->Mask );
|
||||
if (xs->CompactionMask) frame->xstate.Mask |= mask & ~xs->CompactionMask;
|
||||
}
|
||||
|
||||
frame->restore_flags |= flags & ~CONTEXT_INTEGER;
|
||||
|
|
|
@ -1050,9 +1050,11 @@ NTSTATUS WINAPI NtSetContextThread( HANDLE handle, const CONTEXT *context )
|
|||
{
|
||||
CONTEXT_EX *context_ex = (CONTEXT_EX *)(context + 1);
|
||||
XSAVE_AREA_HEADER *xs = (XSAVE_AREA_HEADER *)((char *)context_ex + context_ex->XState.Offset);
|
||||
UINT64 mask = frame->xstate.Mask;
|
||||
|
||||
if (xstate_compaction_enabled) frame->xstate.CompactionMask |= xstate_extended_features();
|
||||
copy_xstate( &frame->xstate, xs, xs->Mask );
|
||||
if (xs->CompactionMask) frame->xstate.Mask |= mask & ~xs->CompactionMask;
|
||||
}
|
||||
|
||||
frame->restore_flags |= flags & ~CONTEXT_INTEGER;
|
||||
|
|
Loading…
Add table
Reference in a new issue