REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3790 Replace Opcode with the corresponding instructions. The code changes have been verified with CompareBuild.py tool, which can be used to compare the results of two different EDK II builds to determine if they generate the same binaries. (tool link: https://github.com/mdkinney/edk2/tree/sandbox/CompareBuild) Signed-off-by: Jason Lou <yun.lou@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn> Cc: Zhiguang Liu <zhiguang.liu@intel.com>
56 lines
1.7 KiB
NASM
56 lines
1.7 KiB
NASM
;------------------------------------------------------------------------------
|
|
;
|
|
; Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
|
|
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
;
|
|
; Module Name:
|
|
;
|
|
; EnablePaging64.Asm
|
|
;
|
|
; Abstract:
|
|
;
|
|
; AsmEnablePaging64 function
|
|
;
|
|
; Notes:
|
|
;
|
|
;------------------------------------------------------------------------------
|
|
|
|
SECTION .text
|
|
|
|
;------------------------------------------------------------------------------
|
|
; VOID
|
|
; EFIAPI
|
|
; InternalX86EnablePaging64 (
|
|
; IN UINT16 Cs,
|
|
; IN UINT64 EntryPoint,
|
|
; IN UINT64 Context1, OPTIONAL
|
|
; IN UINT64 Context2, OPTIONAL
|
|
; IN UINT64 NewStack
|
|
; );
|
|
;------------------------------------------------------------------------------
|
|
global ASM_PFX(InternalX86EnablePaging64)
|
|
ASM_PFX(InternalX86EnablePaging64):
|
|
cli
|
|
mov DWORD [esp], .0 ; offset for far retf, seg is the 1st arg
|
|
mov eax, cr4
|
|
or al, (1 << 5)
|
|
mov cr4, eax ; enable PAE
|
|
mov ecx, 0xc0000080
|
|
rdmsr
|
|
or ah, 1 ; set LME
|
|
wrmsr
|
|
mov eax, cr0
|
|
bts eax, 31 ; set PG
|
|
mov cr0, eax ; enable paging
|
|
retf ; topmost 2 dwords hold the address
|
|
.0:
|
|
BITS 64
|
|
mov rbx, [esp]
|
|
mov rcx, [esp + 8]
|
|
mov rdx, [esp + 0x10]
|
|
mov rsp, [esp + 0x18]
|
|
add rsp, -0x20
|
|
call rbx
|
|
hlt ; no one should get here
|
|
|