]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/SwitchStack.c
Fix a bug in MdePkg BaseLib: StrnCat() and AsciiStrnCat() should NULL terminated...
[mirror_edk2.git] / MdePkg / Library / BaseLib / SwitchStack.c
index ab7185677383886ed16f168eeefb6e198088ab5e..0c3e29d94a06453946b886cf4efeb9bcfed44554 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Switch Stack functions.\r
 \r
-  Copyright (c) 2006 - 2007, Intel Corporation<BR>\r
+  Copyright (c) 2006 - 2008, Intel Corporation<BR>\r
   All rights reserved. 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
 \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  ...         Extended parameters.\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
@@ -57,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