From 18c319ae39f741101ccf0b076bb749e05344d443 Mon Sep 17 00:00:00 2001 From: bxing Date: Wed, 24 May 2006 05:33:03 +0000 Subject: 1. Updated CpuFlushTlb() according to IA-64 programmer's guide 2. Updated Thunk code to preserve EFLAGS/RFLAGS across real mode code invocation 3. Updated comments in x86Thunk.c git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@248 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/Thunk16.asm | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'MdePkg/Library/BaseLib/Ia32') diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.asm b/MdePkg/Library/BaseLib/Ia32/Thunk16.asm index 89d4f679b6..454b8905bc 100644 --- a/MdePkg/Library/BaseLib/Ia32/Thunk16.asm +++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.asm @@ -141,6 +141,12 @@ _ToUserCode PROC call @Base ; push eip @Base: pop bp ; ebp <- offset @Base + DB 67h ; address size override + push [esp + sizeof (IA32_REGS) + 2] + lea eax, [esi + (offset @RealMode - offset @Base)] + push eax + retf +@RealMode: mov cs:[esi + (offset SavedSs - offset @Base)], edx mov cs:[esi + (offset SavedEsp - offset @Base)], bx DB 66h @@ -208,7 +214,9 @@ InternalAsmThunk16 PROC USES ebp ebx esi edi ds es fs gs push 10h pop ecx ; ecx <- selector for data segments lgdt fword ptr [edx + (offset _16Gdtr - offset SavedCr0)] + pushfd call fword ptr [edx + (offset _EntryPoint - offset SavedCr0)] + popfd lidt fword ptr [esp + 36] ; restore protected mode IDTR lea eax, [ebp - sizeof (IA32_REGS)] ret -- cgit v1.2.3