## @file\r
# Base Library implementation.\r
#\r
-# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
# Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
# Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
#\r
Ia32/InternalSwitchStack.c | MSFT\r
Ia32/InternalSwitchStack.c | INTEL\r
Ia32/InternalSwitchStack.S | GCC\r
+ Ia32/InternalSwitchStack.nasm | GCC\r
Ia32/Non-existing.c\r
Unaligned.c\r
X86WriteIdtr.c\r
--- /dev/null
+;------------------------------------------------------------------------------\r
+;\r
+; Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>\r
+; Portions copyright (c) 2011, Apple Inc. All rights reserved.<BR>\r
+; This program and the accompanying materials\r
+; are licensed and made available under the terms and conditions of the BSD License\r
+; which accompanies this distribution. The full text of the license may be found at\r
+; http://opensource.org/licenses/bsd-license.php.\r
+;\r
+; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+;\r
+; Module Name:\r
+;\r
+; InternalSwitchStack.nasm\r
+;\r
+; Abstract:\r
+;\r
+; Implementation of a stack switch on IA-32.\r
+;\r
+;------------------------------------------------------------------------------\r
+\r
+ SECTION .text\r
+\r
+;------------------------------------------------------------------------------\r
+; VOID\r
+; EFIAPI\r
+; InternalSwitchStack (\r
+; IN SWITCH_STACK_ENTRY_POINT EntryPoint,\r
+; IN VOID *Context1, OPTIONAL\r
+; IN VOID *Context2, OPTIONAL\r
+; IN VOID *NewStack\r
+; );\r
+;------------------------------------------------------------------------------\r
+global ASM_PFX(InternalSwitchStack)\r
+ASM_PFX(InternalSwitchStack):\r
+ push ebp\r
+ mov ebp, esp\r
+\r
+ mov esp, [ebp + 20] ; switch stack\r
+ sub esp, 8\r
+ mov eax, [ebp + 16]\r
+ mov [esp + 4], eax\r
+ mov eax, [ebp + 12]\r
+ mov [esp], eax\r
+ push 0 ; keeps gdb from unwinding stack\r
+ jmp dword [ebp + 8] ; call and never return\r