diff options
Diffstat (limited to 'roms/edk2/UefiCpuPkg/Include/StuffRsbNasm.inc')
-rw-r--r-- | roms/edk2/UefiCpuPkg/Include/StuffRsbNasm.inc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/roms/edk2/UefiCpuPkg/Include/StuffRsbNasm.inc b/roms/edk2/UefiCpuPkg/Include/StuffRsbNasm.inc new file mode 100644 index 000000000..f3ba22546 --- /dev/null +++ b/roms/edk2/UefiCpuPkg/Include/StuffRsbNasm.inc @@ -0,0 +1,50 @@ +;------------------------------------------------------------------------------
+;
+; Copyright (c) 2018, Intel Corporation. All rights reserved.<BR>
+; SPDX-License-Identifier: BSD-2-Clause-Patent
+;
+; Abstract:
+;
+; This file provides macro definitions for stuffing the Return Stack Buffer (RSB)
+; for NASM files.
+;
+;------------------------------------------------------------------------------
+
+%define RSB_STUFF_ENTRIES 0x20
+
+;
+; parameters:
+; @param 1: register to use as counter (e.g. IA32:eax, X64:rax)
+; @param 2: stack pointer to restore (IA32:esp, X64:rsp)
+; @param 3: the size of a stack frame (IA32:4, X64:8)
+;
+%macro StuffRsb 3
+ mov %1, RSB_STUFF_ENTRIES / 2
+ %%Unroll1:
+ call %%Unroll2
+ %%SpecTrap1:
+ pause
+ lfence
+ jmp %%SpecTrap1
+ %%Unroll2:
+ call %%StuffLoop
+ %%SpecTrap2:
+ pause
+ lfence
+ jmp %%SpecTrap2
+ %%StuffLoop:
+ dec %1
+ jnz %%Unroll1
+ add %2, RSB_STUFF_ENTRIES * %3 ; Restore the stack pointer
+%endmacro
+
+;
+; RSB stuffing macros for IA32 and X64
+;
+%macro StuffRsb32 0
+ StuffRsb eax, esp, 4
+%endmacro
+
+%macro StuffRsb64 0
+ StuffRsb rax, rsp, 8
+%endmacro
|