]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.nasm
3da341cbb24b7dc61475ef71138265198f572988
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ia32 / InternalSwitchStack.nasm
1 ;------------------------------------------------------------------------------
2 ;
3 ; Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
4 ; Portions copyright (c) 2011, Apple Inc. All rights reserved.<BR>
5 ; This program and the accompanying materials
6 ; are licensed and made available under the terms and conditions of the BSD License
7 ; which accompanies this distribution. The full text of the license may be found at
8 ; http://opensource.org/licenses/bsd-license.php.
9 ;
10 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 ;
13 ; Module Name:
14 ;
15 ; InternalSwitchStack.nasm
16 ;
17 ; Abstract:
18 ;
19 ; Implementation of a stack switch on IA-32.
20 ;
21 ;------------------------------------------------------------------------------
22
23 SECTION .text
24
25 ;------------------------------------------------------------------------------
26 ; VOID
27 ; EFIAPI
28 ; InternalSwitchStack (
29 ; IN SWITCH_STACK_ENTRY_POINT EntryPoint,
30 ; IN VOID *Context1, OPTIONAL
31 ; IN VOID *Context2, OPTIONAL
32 ; IN VOID *NewStack
33 ; );
34 ;------------------------------------------------------------------------------
35 global ASM_PFX(InternalSwitchStack)
36 ASM_PFX(InternalSwitchStack):
37 push ebp
38 mov ebp, esp
39
40 mov esp, [ebp + 20] ; switch stack
41 sub esp, 8
42 mov eax, [ebp + 16]
43 mov [esp + 4], eax
44 mov eax, [ebp + 12]
45 mov [esp], eax
46 push 0 ; keeps gdb from unwinding stack
47 jmp dword [ebp + 8] ; call and never return