]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFspPkg/FspSecCore/Ia32/Stacks.s
DynamicTablesPkg: GTDT updates for ACPI 6.3
[mirror_edk2.git] / IntelFspPkg / FspSecCore / Ia32 / Stacks.s
CommitLineData
c8ec22a2
JY
1#------------------------------------------------------------------------------\r
2#\r
d5fb1edf 3# Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>\r
16a16ea6 4# SPDX-License-Identifier: BSD-2-Clause-Patent\r
c8ec22a2
JY
5#\r
6# Abstract:\r
7#\r
8# Switch the stack from temporary memory to permenent memory.\r
9#\r
10#------------------------------------------------------------------------------\r
11\r
12ASM_GLOBAL ASM_PFX(SecSwitchStack)\r
13\r
14#------------------------------------------------------------------------------\r
15# VOID\r
16# EFIAPI\r
17# SecSwitchStack (\r
18# UINT32 TemporaryMemoryBase,\r
19# UINT32 PermenentMemoryBase\r
20# )\r
21#------------------------------------------------------------------------------\r
22ASM_GLOBAL ASM_PFX(SecSwitchStack)\r
23ASM_PFX(SecSwitchStack):\r
24#\r
d5fb1edf 25# Save four registers: eax, ebx, ecx, edx\r
c8ec22a2 26#\r
d5fb1edf
JY
27 pushl %eax\r
28 pushl %ebx\r
29 pushl %ecx\r
30 pushl %edx\r
c8ec22a2
JY
31\r
32#\r
33# !!CAUTION!! this function address's is pushed into stack after\r
34# migration of whole temporary memory, so need save it to permenent\r
35# memory at first!\r
36#\r
37\r
38 movl 20(%esp), %ebx # Save the first parameter\r
39 movl 24(%esp), %ecx # Save the second parameter\r
40\r
41#\r
42# Save this function's return address into permenent memory at first.\r
43# Then, Fixup the esp point to permenent memory\r
44#\r
45\r
46 movl %esp, %eax\r
47 subl %ebx, %eax\r
48 addl %ecx, %eax\r
49 movl (%esp), %edx # copy pushed register's value to permenent memory\r
50 movl %edx, (%eax)\r
51 movl 4(%esp), %edx\r
52 movl %edx, 4(%eax)\r
53 movl 8(%esp), %edx\r
54 movl %edx, 8(%eax)\r
55 movl 12(%esp), %edx\r
56 movl %edx, 12(%eax)\r
57 movl 16(%esp), %edx # Update this function's return address into permenent memory\r
58 movl %edx, 16(%eax)\r
59 movl %eax, %esp # From now, esp is pointed to permenent memory\r
60\r
61#\r
62# Fixup the ebp point to permenent memory\r
63#\r
c8ec22a2
JY
64 movl %ebp, %eax\r
65 subl %ebx, %eax\r
66 addl %ecx, %eax\r
67 movl %eax, %ebp # From now, ebp is pointed to permenent memory\r
68\r
69#\r
70# Fixup callee's ebp point for PeiDispatch\r
71#\r
d5fb1edf
JY
72# movl %ebp, %eax\r
73# subl %ebx, %eax\r
74# addl %ecx, %eax\r
75# movl %eax, %ebp # From now, ebp is pointed to permenent memory\r
76 popl %edx\r
77 popl %ecx\r
78 popl %ebx\r
79 popl %eax \r
c8ec22a2 80 ret