\r
#include <PeiMain.h>\r
\r
+STATIC\r
VOID *\r
TransferOldDataToNewDataRange (\r
IN PEI_CORE_INSTANCE *PrivateData\r
);\r
\r
-EFI_GUID gEfiPeiCorePrivateGuid = EFI_PEI_CORE_PRIVATE_GUID;\r
-\r
-\r
EFI_STATUS\r
PeiDispatcher (\r
IN EFI_PEI_STARTUP_DESCRIPTOR *PeiStartupDescriptor,\r
BOOLEAN NextFvFound;\r
EFI_FIRMWARE_VOLUME_HEADER *NextFvAddress;\r
EFI_FIRMWARE_VOLUME_HEADER *DefaultFvAddress;\r
+ VOID *TopOfStack;\r
//\r
// Debug data for uninstalled Peim list\r
//\r
PrivateDataInMem = (UINTN) TransferOldDataToNewDataRange (PrivateData);\r
ASSERT (PrivateDataInMem != 0);\r
//\r
- //Subtract 0x10 from the 4th parameter indicating the new stack base,\r
- //in order to provide buffer protection against possible illegal stack\r
- //access that might corrupt the stack.\r
+ // Adjust the top of stack to be aligned at CPU_STACK_ALIGNMENT\r
//\r
+ TopOfStack = (VOID *)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize - CPU_STACK_ALIGNMENT);\r
+ TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);\r
+\r
PeiSwitchStacks (\r
(SWITCH_STACK_ENTRY_POINT)(UINTN)TempPtr.Raw,\r
PeiStartupDescriptor,\r
(VOID*)PrivateDataInMem,\r
- (VOID*)((UINTN)PrivateData->StackBase + (UINTN)PrivateData->StackSize),\r
+ TopOfStack,\r
(VOID*)(UINTN)PrivateData->StackBase\r
);\r
}\r
return Runnable;\r
}\r
\r
-\r
+STATIC\r
VOID *\r
TransferOldDataToNewDataRange (\r
IN PEI_CORE_INSTANCE *PrivateData\r
\r
--*/\r
{\r
+ //\r
+ //Build private HOB to PEI core to transfer old NEM-range data to new NEM-range\r
+ //\r
return BuildGuidDataHob (&gEfiPeiCorePrivateGuid, PrivateData, sizeof (PEI_CORE_INSTANCE));\r
}\r
\r