+++ /dev/null
-;------------------------------------------------------------------------------\r
-;\r
-; Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
-; SPDX-License-Identifier: BSD-2-Clause-Patent\r
-;\r
-; Abstract:\r
-;\r
-; Switch the stack from temporary memory to permenent memory.\r
-;\r
-;------------------------------------------------------------------------------\r
-\r
- .586p\r
- .model flat,C\r
- .code\r
-\r
-;------------------------------------------------------------------------------\r
-; VOID\r
-; EFIAPI\r
-; SecSwitchStack (\r
-; UINT32 TemporaryMemoryBase,\r
-; UINT32 PermenentMemoryBase\r
-; );\r
-;------------------------------------------------------------------------------\r
-SecSwitchStack PROC\r
- ;\r
- ; Save three register: eax, ebx, ecx\r
- ;\r
- push eax\r
- push ebx\r
- push ecx\r
- push edx\r
-\r
- ;\r
- ; !!CAUTION!! this function address's is pushed into stack after\r
- ; migration of whole temporary memory, so need save it to permenent\r
- ; memory at first!\r
- ;\r
-\r
- mov ebx, [esp + 20] ; Save the first parameter\r
- mov ecx, [esp + 24] ; Save the second parameter\r
-\r
- ;\r
- ; Save this function's return address into permenent memory at first.\r
- ; Then, Fixup the esp point to permenent memory\r
- ;\r
- mov eax, esp\r
- sub eax, ebx\r
- add eax, ecx\r
- mov edx, dword ptr [esp] ; copy pushed register's value to permenent memory\r
- mov dword ptr [eax], edx\r
- mov edx, dword ptr [esp + 4]\r
- mov dword ptr [eax + 4], edx\r
- mov edx, dword ptr [esp + 8]\r
- mov dword ptr [eax + 8], edx\r
- mov edx, dword ptr [esp + 12]\r
- mov dword ptr [eax + 12], edx\r
- mov edx, dword ptr [esp + 16] ; Update this function's return address into permenent memory\r
- mov dword ptr [eax + 16], edx\r
- mov esp, eax ; From now, esp is pointed to permenent memory\r
-\r
- ;\r
- ; Fixup the ebp point to permenent memory\r
- ;\r
- mov eax, ebp\r
- sub eax, ebx\r
- add eax, ecx\r
- mov ebp, eax ; From now, ebp is pointed to permenent memory\r
-\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop eax\r
- ret\r
-SecSwitchStack ENDP\r
-\r
- END\r