]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/SwitchStack.c
MdePkg/BaseLib: Support IA32 processors without CLFLUSH
[mirror_edk2.git] / MdePkg / Library / BaseLib / SwitchStack.c
index b2a4af683b2e225457b29b26e09d51cc1a5d31bf..36811175af74f0b5213c402dc94597d6081d9017 100644 (file)
@@ -1,21 +1,18 @@
 /** @file\r
   Switch Stack functions.\r
 \r
-  Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
-  All rights reserved. This program and the accompanying materials\r
+  Copyright (c) 2006 - 2008, Intel Corporation. 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
+  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
 **/\r
 \r
-\r
-\r
-\r
-#include <BaseLibInternals.h>\r
+#include "BaseLibInternals.h"\r
 \r
 /**\r
   Transfers control to a function starting with a new stack.\r
                       function.\r
   @param  NewStack    A pointer to the new stack to use for the EntryPoint\r
                       function.\r
+  @param  ...         This variable argument list is ignored for IA32, x64, and EBC.  \r
+                      For IPF, this variable argument list is expected to contain \r
+                      a single parameter of type VOID * that specifies the new backing \r
+                      store pointer.\r
+\r
 \r
 **/\r
 VOID\r
@@ -56,10 +58,17 @@ SwitchStack (
   ASSERT (EntryPoint != NULL);\r
   ASSERT (NewStack != NULL);\r
 \r
+  //\r
+  // New stack must be aligned with CPU_STACK_ALIGNMENT\r
+  //\r
+  ASSERT (((UINTN)NewStack & (CPU_STACK_ALIGNMENT - 1)) == 0);\r
+\r
   VA_START (Marker, NewStack);\r
 \r
   InternalSwitchStack (EntryPoint, Context1, Context2, NewStack, Marker);\r
 \r
+  VA_END (Marker);\r
+\r
   //\r
   // InternalSwitchStack () will never return\r
   //\r