]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix the bug that if code is run above 4G, AsmDisablePaging64 will be failed
authorklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 5 Jun 2009 11:50:39 +0000 (11:50 +0000)
committerklu2 <klu2@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 5 Jun 2009 11:50:39 +0000 (11:50 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8479 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BaseLib/X64/DisablePaging64.S

index 038af71d2f8b52de5db7fc9e1480b19d17424f51..242c0a07bbd3630f36a21cafe0fe3d63cb6f45c6 100644 (file)
 \r
 ASM_GLOBAL ASM_PFX(InternalX86DisablePaging64)\r
 ASM_PFX(InternalX86DisablePaging64):\r
-    cli    \r
-    lea    L1(%rip), %r10\r
+    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
+   \r
     mov    %r8d, %esi \r
     mov    %r9d, %edi \r
     mov    0x28(%rsp), %eax               # eax <- New Stack\r
@@ -64,4 +75,4 @@ L1:
     push   %rsi                           # push Context1\r
     callq  *%rbx                          # transfer control to EntryPoint\r
     jmp    .                              # no one should get here\r
-\r
+\r_mTransitionEnd :