diff options
Diffstat (limited to 'MdePkg/Library/BaseLib/X64/DisablePaging64.S')
-rw-r--r-- | MdePkg/Library/BaseLib/X64/DisablePaging64.S | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/MdePkg/Library/BaseLib/X64/DisablePaging64.S b/MdePkg/Library/BaseLib/X64/DisablePaging64.S index 7a543febab..e4f77970ed 100644 --- a/MdePkg/Library/BaseLib/X64/DisablePaging64.S +++ b/MdePkg/Library/BaseLib/X64/DisablePaging64.S @@ -27,39 +27,39 @@ # VOID # EFIAPI # InternalX86DisablePaging64 ( -# IN UINT16 Cs, %rdi -# IN UINT64 EntryPoint, %rsi -# IN UINT64 Context1, OPTIONAL %rdx -# IN UINT32 Context2, OPTIONAL %rcx -# IN UINT64 NewStack %r8 +# IN UINT16 Cs, +# IN UINT64 EntryPoint, +# IN UINT64 Context1, OPTIONAL +# IN UINT32 Context2, OPTIONAL +# IN UINT64 NewStack # ); #------------------------------------------------------------------------------ .global ASM_PFX(InternalX86DisablePaging64) ASM_PFX(InternalX86DisablePaging64): cli - shl $0x20,%rcx + shl $0x20,%rcx # rcx[32..47] <- Cs lea L1, %eax mov %r8d, %esi
- or %rax, %rcx
+ or %rax, %rcx # rcx[0..47] <- Cs:@F
mov %r9d, %edi
- mov 0x28(%rsp), %eax
+ mov 0x28(%rsp), %eax # eax <- New Stack
push %rcx
- ret
+ ret # switch to compatibility mode
L1: - mov %eax,%esp + mov %eax,%esp # set up new stack mov %cr0,%rax btr $0x1f,%eax - mov %rax,%cr0 + mov %rax,%cr0 # disable paging mov $0xc0000080,%ecx rdmsr - and $0xfe,%ah + and $0xfe,%ah # clear LME wrmsr mov %cr4,%rax - and $0xdf,%al + and $0xdf,%al # clear PAE mov %rax,%cr4 - push %rdi - push %rsi - callq *%rdx - jmp . + push %rdi # push Context2 + push %rsi # push Context1 + callq *%rdx # transfer control to EntryPoint + jmp . # no one should get here |