]> git.proxmox.com Git - mirror_edk2.git/blame - EmulatorPkg/Sec/Ia32/SwitchRam.asm
EmulatorPkg/Sec: Fix various typos
[mirror_edk2.git] / EmulatorPkg / Sec / Ia32 / SwitchRam.asm
CommitLineData
e148512e 1;------------------------------------------------------------------------------\r
2;\r
3; Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>\r
e3ba31da 4; SPDX-License-Identifier: BSD-2-Clause-Patent\r
e148512e 5;\r
6; Module Name:\r
7;\r
8; Stack.asm\r
9;\r
10; Abstract:\r
11;\r
de949fdb 12; Switch the stack from temporary memory to permanent memory.\r
e148512e 13;\r
14;------------------------------------------------------------------------------\r
15\r
16 .586p\r
17 .model flat,C\r
18 .code\r
79e4f2a5 19\r
e148512e 20;------------------------------------------------------------------------------\r
21; VOID\r
22; EFIAPI\r
23; SecSwitchStack (\r
24; UINT32 TemporaryMemoryBase,\r
25; UINT32 PermenentMemoryBase\r
26; );\r
79e4f2a5 27;------------------------------------------------------------------------------\r
e148512e 28SecSwitchStack PROC\r
29 ;\r
30 ; Save three register: eax, ebx, ecx\r
31 ;\r
32 push eax\r
33 push ebx\r
34 push ecx\r
35 push edx\r
79e4f2a5 36\r
e148512e 37 ;\r
38 ; !!CAUTION!! this function address's is pushed into stack after\r
de949fdb 39 ; migration of whole temporary memory, so need save it to permanent\r
e148512e 40 ; memory at first!\r
41 ;\r
79e4f2a5 42\r
e148512e 43 mov ebx, [esp + 20] ; Save the first parameter\r
44 mov ecx, [esp + 24] ; Save the second parameter\r
79e4f2a5 45\r
e148512e 46 ;\r
de949fdb
AC
47 ; Save this function's return address into permanent memory at first.\r
48 ; Then, Fixup the esp point to permanent memory\r
e148512e 49 ;\r
50 mov eax, esp\r
51 sub eax, ebx\r
52 add eax, ecx\r
de949fdb 53 mov edx, dword ptr [esp] ; copy pushed register's value to permanent memory\r
79e4f2a5 54 mov dword ptr [eax], edx\r
e148512e 55 mov edx, dword ptr [esp + 4]\r
79e4f2a5 56 mov dword ptr [eax + 4], edx\r
e148512e 57 mov edx, dword ptr [esp + 8]\r
79e4f2a5 58 mov dword ptr [eax + 8], edx\r
e148512e 59 mov edx, dword ptr [esp + 12]\r
79e4f2a5 60 mov dword ptr [eax + 12], edx\r
de949fdb 61 mov edx, dword ptr [esp + 16] ; Update this function's return address into permanent memory\r
79e4f2a5 62 mov dword ptr [eax + 16], edx\r
de949fdb 63 mov esp, eax ; From now, esp is pointed to permanent memory\r
79e4f2a5 64\r
e148512e 65 ;\r
de949fdb 66 ; Fixup the ebp point to permanent memory\r
e148512e 67 ;\r
68 mov eax, ebp\r
69 sub eax, ebx\r
70 add eax, ecx\r
de949fdb 71 mov ebp, eax ; From now, ebp is pointed to permanent memory\r
79e4f2a5 72\r
e148512e 73 ;\r
74 ; Fixup callee's ebp point for PeiDispatch\r
75 ;\r
76 mov eax, dword ptr [ebp]\r
77 sub eax, ebx\r
78 add eax, ecx\r
de949fdb 79 mov dword ptr [ebp], eax ; From now, Temporary's PPI caller's stack is in permanent memory\r
79e4f2a5 80\r
e148512e 81 pop edx\r
82 pop ecx\r
83 pop ebx\r
84 pop eax\r
85 ret\r
86SecSwitchStack ENDP\r
87\r
88 END\r