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 48