Home | History | Annotate | Download | only in Ia32
      1 #------------------------------------------------------------------------------
      2 #
      3 # Copyright (c) 2006 - 2008, 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.S
     16 #
     17 # Abstract:
     18 #
     19 #   Implementation of a stack switch on IA-32.
     20 #
     21 #------------------------------------------------------------------------------
     22 
     23 ASM_GLOBAL ASM_PFX(InternalSwitchStack)
     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 ASM_PFX(InternalSwitchStack):
     36   pushl %ebp
     37 	movl	%esp, %ebp
     38 
     39 	movl	20(%ebp), %esp      # switch stack
     40 	subl	$8, %esp
     41 
     42 	movl	16(%ebp), %eax
     43 	movl	%eax, 4(%esp)
     44 	movl	12(%ebp), %eax
     45 	movl	%eax, (%esp)
     46 	pushl $0                  # keeps gdb from unwinding stack
     47 	jmp   *8(%ebp)            # call and never return
     48 
     49