]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/CpuDxe: Fix boot error
authorGuo Dong <guo.dong@intel.com>
Thu, 7 Jan 2021 03:10:45 +0000 (11:10 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 12 Jan 2021 06:35:30 +0000 (06:35 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3084

When DXE drivers are dispatched above 4GB memory in 64bit
mode, the address setCodeSelectorLongJump in stack will
be override by parameter. Jump to Qword is not supported
by some processors. So use "o64 retf" instead.

Signed-off-by: Guo Dong <guo.dong@intel.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Tested-by: James Bottomley <jejb@linux.ibm.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm

index c3489bcc3e896f47281c8e1ba1fedbc9637d5beb..66f8857fc0c873228f3d5eac1346850cb8b0683b 100644 (file)
 ;------------------------------------------------------------------------------\r
 global ASM_PFX(SetCodeSelector)\r
 ASM_PFX(SetCodeSelector):\r
-    sub     rsp, 0x10\r
+    push    rcx\r
     lea     rax, [setCodeSelectorLongJump]\r
-    mov     [rsp], rax\r
-    mov     [rsp+4], cx\r
-    jmp     dword far [rsp]\r
+    push    rax\r
+    o64 retf\r
 setCodeSelectorLongJump:\r
-    add     rsp, 0x10\r
     ret\r
 \r
 ;------------------------------------------------------------------------------\r