From 48c8b6a299918612436e84ab22b55be6b88a90a2 Mon Sep 17 00:00:00 2001 From: li-elvin Date: Mon, 7 Jan 2013 07:12:19 +0000 Subject: [PATCH] Current Thunk16.asm implementation clears reserved bits, which does not follow IA32 SDM. Now the fix is to only clear PAE and PSE bit of CR4 for real mode. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14037 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/Ia32/Thunk16.S | 4 ++-- MdePkg/Library/BaseLib/Ia32/Thunk16.asm | 4 ++-- MdePkg/Library/BaseLib/X64/Thunk16.S | 4 ++-- MdePkg/Library/BaseLib/X64/Thunk16.asm | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.S b/MdePkg/Library/BaseLib/Ia32/Thunk16.S index 0555cf1bfd..8356c5a1c7 100644 --- a/MdePkg/Library/BaseLib/Ia32/Thunk16.S +++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -175,7 +175,7 @@ ASM_PFX(InternalAsmThunk16): andl $0x7ffffffe, %eax # clear PE, PG bits movl %cr4, %ebp mov %ebp, 0xfffffff1(%edx) - andl $0x300, %ebp # clear all but PCE and OSFXSR bits + andl $0xffffffcf, %ebp # clear PAE, PSE bits pushl $0x10 pop %ecx # ecx <- selector for data segments lgdtl 0x20(%edx) diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.asm b/MdePkg/Library/BaseLib/Ia32/Thunk16.asm index 6df0a4a46a..3e84aedf3d 100644 --- a/MdePkg/Library/BaseLib/Ia32/Thunk16.asm +++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.asm @@ -3,7 +3,7 @@ ;------------------------------------------------------------------------------ ; -; Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+; Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -237,7 +237,7 @@ InternalAsmThunk16 PROC USES ebp ebx esi edi ds es fs gs and eax, 7ffffffeh ; clear PE, PG bits mov ebp, cr4 mov [edx + (SavedCr4 - SavedCr0)], ebp - and ebp, 300h ; clear all but PCE and OSFXSR bits + and ebp, NOT 30h ; clear PAE, PSE bits push 10h pop ecx ; ecx <- selector for data segments lgdt fword ptr [edx + (_16Gdtr - SavedCr0)] diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.S b/MdePkg/Library/BaseLib/X64/Thunk16.S index d037a71043..a521aff31b 100644 --- a/MdePkg/Library/BaseLib/X64/Thunk16.S +++ b/MdePkg/Library/BaseLib/X64/Thunk16.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ # -# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+# Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
# This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at @@ -295,7 +295,7 @@ ASM_PFX(InternalAsmThunk16): andl $0x7ffffffe,%eax # clear PE, PG bits movq %cr4, %rbp movl %ebp, (%rcx) # save CR4 in SavedCr4 - andl $0x300,%ebp # clear all but PCE and OSFXSR bits + andl $0xffffffcf,%ebp # clear PAE, PSE bits movl %r8d, %esi # esi <- 16-bit stack segment .byte 0x6a, DATA32 popq %rdx diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.asm b/MdePkg/Library/BaseLib/X64/Thunk16.asm index 8b208fdb58..01051341f6 100644 --- a/MdePkg/Library/BaseLib/X64/Thunk16.asm +++ b/MdePkg/Library/BaseLib/X64/Thunk16.asm @@ -3,7 +3,7 @@ ;------------------------------------------------------------------------------ ; -; Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
+; Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.
; This program and the accompanying materials ; are licensed and made available under the terms and conditions of the BSD License ; which accompanies this distribution. The full text of the license may be found at @@ -282,7 +282,7 @@ InternalAsmThunk16 PROC USES rbp rbx rsi rdi and eax, 7ffffffeh ; clear PE, PG bits mov rbp, cr4 mov [rcx], ebp ; save CR4 in SavedCr4 - and ebp, 300h ; clear all but PCE and OSFXSR bits + and ebp, NOT 30h ; clear PAE, PSE bits mov esi, r8d ; esi <- 16-bit stack segment DB 6ah, DATA32 ; push DATA32 pop rdx ; rdx <- 32-bit data segment selector -- 2.39.2