REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3084 When DXE drivers are dispatched above 4GB memory and the system is already in 64bit mode, the address setCodeSelectorLongJump in stack will be override by parameter. so change to use 64bit address and jump to qword address. Signed-off-by: Guo Dong <guo.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
47 lines
1.2 KiB
NASM
47 lines
1.2 KiB
NASM
;------------------------------------------------------------------------------
|
|
;*
|
|
;* Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
|
;* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
;*
|
|
;* CpuAsm.nasm
|
|
;*
|
|
;* Abstract:
|
|
;*
|
|
;------------------------------------------------------------------------------
|
|
|
|
DEFAULT REL
|
|
SECTION .text
|
|
|
|
;------------------------------------------------------------------------------
|
|
; VOID
|
|
; SetCodeSelector (
|
|
; UINT16 Selector
|
|
; );
|
|
;------------------------------------------------------------------------------
|
|
global ASM_PFX(SetCodeSelector)
|
|
ASM_PFX(SetCodeSelector):
|
|
sub rsp, 0x10
|
|
lea rax, [setCodeSelectorLongJump]
|
|
mov [rsp], rax
|
|
mov [rsp+8], cx
|
|
jmp qword far [rsp]
|
|
setCodeSelectorLongJump:
|
|
add rsp, 0x10
|
|
ret
|
|
|
|
;------------------------------------------------------------------------------
|
|
; VOID
|
|
; SetDataSelectors (
|
|
; UINT16 Selector
|
|
; );
|
|
;------------------------------------------------------------------------------
|
|
global ASM_PFX(SetDataSelectors)
|
|
ASM_PFX(SetDataSelectors):
|
|
o16 mov ss, cx
|
|
o16 mov ds, cx
|
|
o16 mov es, cx
|
|
o16 mov fs, cx
|
|
o16 mov gs, cx
|
|
ret
|
|
|