diff options
Diffstat (limited to 'src/pal/src/arch/i386/context2.S')
-rw-r--r-- | src/pal/src/arch/i386/context2.S | 47 |
1 files changed, 15 insertions, 32 deletions
diff --git a/src/pal/src/arch/i386/context2.S b/src/pal/src/arch/i386/context2.S index 16cbcc855c..11aba5e647 100644 --- a/src/pal/src/arch/i386/context2.S +++ b/src/pal/src/arch/i386/context2.S @@ -113,39 +113,22 @@ LOCAL_LABEL(Done_Restore_CONTEXT_FLOATING_POINT): movdqu xmm7, [eax + CONTEXT_Xmm7] LOCAL_LABEL(Done_Restore_CONTEXT_EXTENDED_REGISTERS): - // Restore CONTROL register(s) - mov ecx, [eax + CONTEXT_Eip] - mov [esp], ecx - - mov ecx, [eax + CONTEXT_Esp] - push ecx - mov ecx, [eax + CONTEXT_Ebp] - push ecx - - pop ebp - pop esp - - // Restore INTEGER register(s) - mov ecx, [eax + CONTEXT_Edi] - push ecx - mov ecx, [eax + CONTEXT_Esi] - push ecx - mov ecx, [eax + CONTEXT_Edx] - push ecx - mov ecx, [eax + CONTEXT_Ecx] - push ecx - mov ecx, [eax + CONTEXT_Ebx] - push ecx - mov ecx, [eax + CONTEXT_Eax] - push ecx + // Restore Stack + mov esp, [eax + CONTEXT_Esp] - pop eax - pop ebx - pop ecx - pop edx - pop esi - pop edi + // Create a minimal frame + push DWORD PTR [eax + CONTEXT_Eip] + + // Restore register(s) + mov ebp, [eax + CONTEXT_Ebp] + mov edi, [eax + CONTEXT_Edi] + mov esi, [eax + CONTEXT_Esi] + mov edx, [eax + CONTEXT_Edx] + mov ecx, [eax + CONTEXT_Ecx] + mov ebx, [eax + CONTEXT_Ebx] + mov eax, [eax + CONTEXT_Eax] - ret 8 + // Resume + ret LEAF_END RtlRestoreContext, _TEXT |