Files
system76-edk2/MdePkg/Library/BaseLib/X64/SetJump.nasm
Jason d3febfd9ad MdePkg: Replace Opcode with the corresponding instructions.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3790

Replace Opcode with the corresponding instructions.
The code changes have been verified with CompareBuild.py tool, which
can be used to compare the results of two different EDK II builds to
determine if they generate the same binaries.
(tool link: https://github.com/mdkinney/edk2/tree/sandbox/CompareBuild)

Signed-off-by: Jason Lou <yun.lou@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
2022-03-01 01:45:47 +00:00

82 lines
2.2 KiB
NASM

;------------------------------------------------------------------------------
;
; Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
; SPDX-License-Identifier: BSD-2-Clause-Patent
;
; Module Name:
;
; SetJump.Asm
;
; Abstract:
;
; Implementation of SetJump() on x64.
;
;------------------------------------------------------------------------------
%include "Nasm.inc"
DEFAULT REL
SECTION .text
extern ASM_PFX(InternalAssertJumpBuffer)
extern ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))
;------------------------------------------------------------------------------
; UINTN
; EFIAPI
; SetJump (
; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer
; );
;------------------------------------------------------------------------------
global ASM_PFX(SetJump)
ASM_PFX(SetJump):
push rcx
add rsp, -0x20
call ASM_PFX(InternalAssertJumpBuffer)
add rsp, 0x20
pop rcx
pop rdx
xor rax, rax
mov [rcx + 0xF8], rax ; save 0 to SSP
mov eax, [ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))]
test eax, eax
jz CetDone
mov rax, cr4
bt eax, 23 ; check if CET is enabled
jnc CetDone
mov rax, 1
incsspq rax ; to read original SSP
rdsspq rax
mov [rcx + 0xF8], rax ; save SSP
CetDone:
mov [rcx], rbx
mov [rcx + 8], rsp
mov [rcx + 0x10], rbp
mov [rcx + 0x18], rdi
mov [rcx + 0x20], rsi
mov [rcx + 0x28], r12
mov [rcx + 0x30], r13
mov [rcx + 0x38], r14
mov [rcx + 0x40], r15
mov [rcx + 0x48], rdx
; save non-volatile fp registers
stmxcsr [rcx + 0x50]
movdqu [rcx + 0x58], xmm6
movdqu [rcx + 0x68], xmm7
movdqu [rcx + 0x78], xmm8
movdqu [rcx + 0x88], xmm9
movdqu [rcx + 0x98], xmm10
movdqu [rcx + 0xA8], xmm11
movdqu [rcx + 0xB8], xmm12
movdqu [rcx + 0xC8], xmm13
movdqu [rcx + 0xD8], xmm14
movdqu [rcx + 0xE8], xmm15
xor rax, rax
jmp rdx