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