X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FLibrary%2FBaseLib%2FX64%2FThunk16.asm;h=3121867ebb41e4f886d8df7a924fcc48de0d6e19;hp=15aaa80090774af1e8a94a03ed398283bde3819a;hb=18c319ae39f741101ccf0b076bb749e05344d443;hpb=4df60ea54fd2ee5bf97586f453165ab3533a1aec diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.asm b/MdePkg/Library/BaseLib/X64/Thunk16.asm index 15aaa80090..3121867ebb 100644 --- a/MdePkg/Library/BaseLib/X64/Thunk16.asm +++ b/MdePkg/Library/BaseLib/X64/Thunk16.asm @@ -149,6 +149,11 @@ _ToUserCode PROC call @Base ; push eip @Base: pop bp ; ebp <- offset @Base + push [esp + sizeof (IA32_REGS) + 2] + lea eax, [rsi + (offset @RealMode - offset @Base)] + push rax + retf +@RealMode: DB 2eh ; cs: mov [rsi + (offset SavedSs - offset @Base)], edi DB 2eh ; cs: @@ -222,7 +227,9 @@ InternalAsmThunk16 PROC USES rbp rbx rsi rdi push 10h pop rdx ; rdx <- selector for data segments lgdt fword ptr [rcx + (offset _16Gdtr - offset SavedCr4)] + pushfq call fword ptr [rcx + (offset _EntryPoint - offset SavedCr4)] + popfq lidt fword ptr [rsp + 38h] ; restore protected mode IDTR lea eax, [rbp - sizeof (IA32_REGS)] pop gs