diff options
author | Guo Dong <guo.dong@intel.com> | 2021-01-07 11:10:45 +0800 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2021-01-12 06:35:30 +0000 |
commit | ebfe2d3eb5ac7fd92d74011edb31303a181920c7 (patch) | |
tree | 1b5d73ff4268eb811ca66e106ef4ccb51cc6e4d8 /UefiCpuPkg/CpuDxe/X64 | |
parent | edd74ad3ad79b855f76d9cf60a96c405cb3e863b (diff) | |
download | edk2-ebfe2d3eb5ac7fd92d74011edb31303a181920c7.zip edk2-ebfe2d3eb5ac7fd92d74011edb31303a181920c7.tar.gz edk2-ebfe2d3eb5ac7fd92d74011edb31303a181920c7.tar.bz2 |
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 <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>
Diffstat (limited to 'UefiCpuPkg/CpuDxe/X64')
-rw-r--r-- | UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm b/UefiCpuPkg/CpuDxe/X64/CpuAsm.nasm index c3489bc..66f8857 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
;------------------------------------------------------------------------------
|