1;------------------------------------------------------------------------------
2;
3; Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
4; Portions copyright (c) 2011, Apple Inc. All rights reserved.<BR>
5; SPDX-License-Identifier: BSD-2-Clause-Patent
6;
7; Module Name:
8;
9;   InternalSwitchStack.nasm
10;
11; Abstract:
12;
13;   Implementation of a stack switch on IA-32.
14;
15;------------------------------------------------------------------------------
16
17    SECTION .text
18
19;------------------------------------------------------------------------------
20; VOID
21; EFIAPI
22; InternalSwitchStack (
23;   IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,
24;   IN      VOID                      *Context1,   OPTIONAL
25;   IN      VOID                      *Context2,   OPTIONAL
26;   IN      VOID                      *NewStack
27;   );
28;------------------------------------------------------------------------------
29global ASM_PFX(InternalSwitchStack)
30ASM_PFX(InternalSwitchStack):
31  push  ebp
32  mov   ebp, esp
33
34  mov   esp, [ebp + 20]    ; switch stack
35  sub   esp, 8
36  mov   eax, [ebp + 16]
37  mov   [esp + 4], eax
38  mov   eax, [ebp + 12]
39  mov   [esp], eax
40  push  0                  ; keeps gdb from unwinding stack
41  jmp   dword [ebp + 8]    ; call and never return
42