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;------------------------------------------------------------------------------ 35global ASM_PFX(InternalSwitchStack) 36ASM_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 48