From 2e56bb155b83686a15b24bffb104396902d75877 Mon Sep 17 00:00:00 2001 From: klu2 Date: Fri, 5 Jun 2009 11:50:39 +0000 Subject: [PATCH] Fix the bug that if code is run above 4G, AsmDisablePaging64 will be failed git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8479 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/BaseLib/X64/DisablePaging64.S | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/MdePkg/Library/BaseLib/X64/DisablePaging64.S b/MdePkg/Library/BaseLib/X64/DisablePaging64.S index 038af71d2f..242c0a07bb 100644 --- a/MdePkg/Library/BaseLib/X64/DisablePaging64.S +++ b/MdePkg/Library/BaseLib/X64/DisablePaging64.S @@ -37,8 +37,19 @@ ASM_GLOBAL ASM_PFX(InternalX86DisablePaging64) ASM_PFX(InternalX86DisablePaging64): - cli - lea L1(%rip), %r10 + cli + lea L1(%rip), %rsi # rsi <- The start address of transition code + mov 0x28(%rsp), %rdi # rdi <- New stack + sub $64, %rdi # rdi <- use 64 byte in stack to hold transition code + mov %rdi, %r10 # r10 <- The start address of transicition code below 4G + lea _mTransitionEnd(%rip), %rax # rax <- end of transition code + sub %rsi, %rax # rax <- The size of transition piece code + push %rcx # save rcx to stack + mov %rax, %rcx # rcx <- The size of transition piece code + rep + movsb # copy transition code to (new stack - 64byte) below 4G + pop %rcx # restore rcx + mov %r8d, %esi mov %r9d, %edi mov 0x28(%rsp), %eax # eax <- New Stack @@ -64,4 +75,4 @@ L1: push %rsi # push Context1 callq *%rbx # transfer control to EntryPoint jmp . # no one should get here - + _mTransitionEnd :