;*****************************************************************************\r
;*\r
-;* Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>\r
+;* Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
;* This program and the accompanying materials \r
;* are licensed and made available under the terms and conditions of the BSD License \r
;* which accompanies this distribution. The full text of the license may be found at \r
\r
_TEXT SEGMENT FLAT "CODE" PARA\r
\r
+STACK_PARAM_SIZE EQU 16\r
+\r
IA32_REGS STRUC 4t\r
_EDI DD ?\r
_ESI DD ?\r
push sizeof (IA32_REGS) / 4\r
pop ecx\r
rep movsd ; copy context to 16-bit stack\r
+\r
+ ; copy eflags to stack frame\r
+ mov eax, [esi - sizeof(IA32_REGS)]._EFLAGS\r
+ mov [edi - sizeof(IA32_REGS) - STACK_PARAM_SIZE - 4], eax\r
+\r
pop ebx ; ebx <- 16-bit stack offset\r
mov eax, offset @F ; return offset\r
stosd\r
pop es\r
pop fs\r
pop gs\r
- add sp, 4 ; skip EFlags\r
- test (_STK16 ptr [esp + 8]).ThunkFlags, 1\r
+ sub esp, (sizeof(IA32_REGS) - 12) + STACK_PARAM_SIZE + 4\r
+ popfd\r
+ test (_STK16 ptr [esp + STACK_PARAM_SIZE + sizeof(IA32_REGS)]).ThunkFlags, 1\r
jz @F\r
- pushf\r
+ pushf ; push Flags when it's INT#\r
@@:\r
push cs\r
; push @FarCallRet - _Code16Addr\r
DB 68h ; push /iw\r
DW @FarCallRet - _Code16Addr\r
jz @F\r
- jmp fword ptr [esp + 6]\r
+ jmp fword ptr [esp + 6 + STACK_PARAM_SIZE + sizeof(IA32_REGS) - 8]\r
@@:\r
- jmp fword ptr [esp + 4]\r
+ jmp fword ptr [esp + 4 + STACK_PARAM_SIZE + sizeof(IA32_REGS) - 8]\r
@FarCallRet:\r
+ add esp, (sizeof(IA32_REGS) - 12) + STACK_PARAM_SIZE + 4\r
pushfd\r
push gs\r
push fs\r