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>
;------------------------------------------------------------------------------\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