From ebfe2d3eb5ac7fd92d74011edb31303a181920c7 Mon Sep 17 00:00:00 2001 From: Guo Dong Date: Thu, 7 Jan 2021 11:10:45 +0800 Subject: [PATCH] UefiCpuPkg/CpuDxe: Fix boot error 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 Acked-by: Laszlo Ersek Tested-by: Tom Lendacky Reviewed-by: Michael D Kinney Tested-by: James Bottomley Reviewed-by: Ray Ni --- UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm b/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm index c3489bcc3e..66f8857fc0 100644 --- a/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm +++ b/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm @@ -20,13 +20,11 @@ ;------------------------------------------------------------------------------ global ASM_PFX(SetCodeSelector) ASM_PFX(SetCodeSelector): - sub rsp, 0x10 + push rcx lea rax, [setCodeSelectorLongJump] - mov [rsp], rax - mov [rsp+4], cx - jmp dword far [rsp] + push rax + o64 retf setCodeSelectorLongJump: - add rsp, 0x10 ret ;------------------------------------------------------------------------------ -- 2.39.2