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
This commit is contained in:
klu2 2009-06-05 11:50:39 +00:00
parent ce4c0e31b0
commit 2e56bb155b
1 changed files with 14 additions and 3 deletions

View File

@ -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 :