summaryrefslogtreecommitdiff
path: root/UnixPkg/Sec/X64/SwitchStack.S
diff options
context:
space:
mode:
Diffstat (limited to 'UnixPkg/Sec/X64/SwitchStack.S')
-rw-r--r--UnixPkg/Sec/X64/SwitchStack.S13
1 files changed, 11 insertions, 2 deletions
diff --git a/UnixPkg/Sec/X64/SwitchStack.S b/UnixPkg/Sec/X64/SwitchStack.S
index dfb618b395..e964e4d178 100644
--- a/UnixPkg/Sec/X64/SwitchStack.S
+++ b/UnixPkg/Sec/X64/SwitchStack.S
@@ -39,7 +39,9 @@
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(PeiSwitchStacks)
ASM_PFX(PeiSwitchStacks):
-// movq %rdx, %rdx
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
+
movq %r8, %rsp
movq %rdi, %rax
@@ -50,7 +52,7 @@ ASM_PFX(PeiSwitchStacks):
# Reserve space for register parameters (rcx, rdx, r8 & r9) on the stack,
# in case the callee wishes to spill them.
#
- subq $40, %rsp // 32-byte shadow space plus alignment pad
+ subq $32, %rsp // 32-byte shadow space plus alignment pad
call *%rax
@@ -74,6 +76,9 @@ ASM_PFX(PeiSwitchStacks):
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(UnixPeiSwitchStacks)
ASM_PFX(UnixPeiSwitchStacks):
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
+
mov %rdi, %rax
mov %rsi, %rdi
mov %rdx, %rsi
@@ -100,12 +105,16 @@ ASM_PFX(UnixPeiSwitchStacks):
#------------------------------------------------------------------------------
ASM_GLOBAL ASM_PFX(SecSwitchStack)
ASM_PFX(SecSwitchStack):
+ pushq %rbp // stack frame is for the debugger
+ movq %rsp, %rbp
mov %rsp, %rax
sub %rdi, %rax
add %rsi, %rax
mov (%rip), %r10
mov %r10, (%rax)
+
+ popq %rbp
ret
\ No newline at end of file