1 #------------------------------------------------------------------------------
3 # Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
4 # This program and the accompanying materials
5 # are licensed and made available under the terms and conditions of the BSD License
6 # which accompanies this distribution. The full text of the license may be found at
7 # http://opensource.org/licenses/bsd-license.php.
9 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 # Switch the stack from temporary memory to permenent memory.
16 #------------------------------------------------------------------------------
18 ASM_GLOBAL ASM_PFX(SecSwitchStack)
20 #------------------------------------------------------------------------------
24 # UINT32 TemporaryMemoryBase,
25 # UINT32 PermenentMemoryBase
27 #------------------------------------------------------------------------------
28 ASM_GLOBAL ASM_PFX(SecSwitchStack)
29 ASM_PFX(SecSwitchStack):
31 # Save four registers: eax, ebx, ecx, edx
39 # !!CAUTION!! this function address's is pushed into stack after
40 # migration of whole temporary memory, so need save it to permenent
44 movl 20(%esp), %ebx # Save the first parameter
45 movl 24(%esp), %ecx # Save the second parameter
48 # Save this function's return address into permenent memory at first.
49 # Then, Fixup the esp point to permenent memory
55 movl (%esp), %edx # copy pushed register's value to permenent memory
63 movl 16(%esp), %edx # Update this function's return address into permenent memory
65 movl %eax, %esp # From now, esp is pointed to permenent memory
68 # Fixup the ebp point to permenent memory
73 movl %eax, %ebp # From now, ebp is pointed to permenent memory
76 # Fixup callee's ebp point for PeiDispatch
81 # movl %eax, %ebp # From now, ebp is pointed to permenent memory