]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/X64/Thunk16.asm
Fix EDKT138. And add active_platform file info for stand alone module build.
[mirror_edk2.git] / MdePkg / Library / BaseLib / X64 / Thunk16.asm
index 15aaa80090774af1e8a94a03ed398283bde3819a..b3c0769f1f36099c9e703e85fb900575a3296232 100644 (file)
@@ -26,9 +26,8 @@ EXTERNDEF   m16Gdt:WORD
 EXTERNDEF   m16GdtrBase:WORD\r
 EXTERNDEF   mTransition:WORD\r
 \r
-THUNK_ATTRIBUTE_BIG_REAL_MODE               EQU 1\r
-THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15     EQU 2\r
-THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL   EQU 4\r
+;THUNK_ATTRIBUTE_DISABLE_A20_MASK_INT_15     EQU 2\r
+;THUNK_ATTRIBUTE_DISABLE_A20_MASK_KBD_CTRL   EQU 4\r
 \r
 IA32_REGS   STRUC   4t\r
 _EDI        DD      ?\r
@@ -149,6 +148,11 @@ _ToUserCode PROC
     call    @Base                       ; push eip\r
 @Base:\r
     pop     bp                          ; ebp <- offset @Base\r
+    push    [esp + sizeof (IA32_REGS) + 2]\r
+    lea     eax, [rsi + (offset @RealMode - offset @Base)]\r
+    push    rax\r
+    retf\r
+@RealMode:\r
     DB      2eh                         ; cs:\r
     mov     [rsi + (offset SavedSs - offset @Base)], edi\r
     DB      2eh                         ; cs:\r
@@ -222,7 +226,9 @@ InternalAsmThunk16  PROC    USES    rbp rbx rsi rdi
     push    10h\r
     pop     rdx                         ; rdx <- selector for data segments\r
     lgdt    fword ptr [rcx + (offset _16Gdtr - offset SavedCr4)]\r
+    pushfq\r
     call    fword ptr [rcx + (offset _EntryPoint - offset SavedCr4)]\r
+    popfq\r
     lidt    fword ptr [rsp + 38h]       ; restore protected mode IDTR\r
     lea     eax, [rbp - sizeof (IA32_REGS)]\r
     pop     gs\r