]> git.proxmox.com Git - mirror_edk2.git/blame - MdePkg/Library/BaseLib/Ia32/SetJump.nasm
MdePkg: Replace Opcode with the corresponding instructions.
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ia32 / SetJump.nasm
CommitLineData
72ed2ede
JJ
1;------------------------------------------------------------------------------\r
2;\r
d3febfd9 3; Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>\r
9344f092 4; SPDX-License-Identifier: BSD-2-Clause-Patent\r
72ed2ede
JJ
5;\r
6; Module Name:\r
7;\r
8; SetJump.Asm\r
9;\r
10; Abstract:\r
11;\r
12; Implementation of SetJump() on IA-32.\r
13;\r
14;------------------------------------------------------------------------------\r
15\r
0aac2f77
JY
16%include "Nasm.inc"\r
17\r
72ed2ede
JJ
18 SECTION .text\r
19\r
20extern ASM_PFX(InternalAssertJumpBuffer)\r
0aac2f77 21extern ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))\r
72ed2ede
JJ
22\r
23;------------------------------------------------------------------------------\r
24; UINTN\r
25; EFIAPI\r
26; SetJump (\r
27; OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer\r
28; );\r
29;------------------------------------------------------------------------------\r
30global ASM_PFX(SetJump)\r
31ASM_PFX(SetJump):\r
32 push DWORD [esp + 4]\r
33 call ASM_PFX(InternalAssertJumpBuffer) ; To validate JumpBuffer\r
34 pop ecx\r
35 pop ecx ; ecx <- return address\r
36 mov edx, [esp]\r
0aac2f77
JY
37\r
38 xor eax, eax\r
39 mov [edx + 24], eax ; save 0 to SSP\r
40\r
41 mov eax, [ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))]\r
42 test eax, eax\r
43 jz CetDone\r
44 mov eax, cr4\r
45 bt eax, 23 ; check if CET is enabled\r
46 jnc CetDone\r
47\r
48 mov eax, 1\r
d3febfd9
J
49 incsspd eax ; to read original SSP\r
50 rdsspd eax\r
0aac2f77
JY
51 mov [edx + 0x24], eax ; save SSP\r
52\r
53CetDone:\r
54\r
72ed2ede
JJ
55 mov [edx], ebx\r
56 mov [edx + 4], esi\r
57 mov [edx + 8], edi\r
58 mov [edx + 12], ebp\r
59 mov [edx + 16], esp\r
60 mov [edx + 20], ecx ; eip value to restore in LongJump\r
61 xor eax, eax\r
62 jmp ecx\r
63\r