NULL\r
);\r
\r
- if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) { \r
+ if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) {\r
//\r
// The DxeIpl has not yet been shadowed\r
//\r
// Compute the top of the stack we were allocated. Pre-allocate a UINTN\r
// for safety.\r
//\r
- TopOfStack = (VOID *)((UINTN)BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - sizeof (UINTN));\r
+ TopOfStack = (VOID *)((UINTN)BaseOfStack + EFI_SIZE_TO_PAGES (STACK_SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT);\r
+ TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);\r
\r
//\r
// Add architecture-specifc HOBs (including the BspStore HOB)\r
\r
ASSERT_EFI_ERROR (Status);\r
Status = PeiRecovery->LoadRecoveryCapsule (PeiServices, PeiRecovery);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_ERROR, "Load Recovery Capsule Failed.(Status = %r)\n", Status));\r
+ CpuDeadLoop ();\r
+ }\r
\r
//\r
// Now should have a HOB with the DXE core w/ the old HOB destroyed\r
// Transfer control to the DXE Core\r
// The handoff state is simply a pointer to the HOB list\r
//\r
-// PERF_END (PeiServices, L"DxeIpl", NULL, 0);\r
\r
Status = PeiServicesInstallPpi (&mPpiSignal);\r
\r
);\r
\r
DEBUG ((EFI_D_INFO, "DXE Core Entry\n"));\r
- SwitchStack (\r
+ SwitchIplStacks (\r
(SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint,\r
HobList.Raw,\r
- (VOID *) (UINTN) BspStore,\r
- TopOfStack\r
+ NULL,\r
+ TopOfStack,\r
+ (VOID *) (UINTN) BspStore\r
);\r
\r
//\r
// If we get here, then the DXE Core returned. This is an error\r
+ // Dxe Core should not return.\r
//\r
- ASSERT_EFI_ERROR (Status);\r
+ ASSERT (FALSE);\r
+ CpuDeadLoop ();\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
EFI_FIRMWARE_VOLUME_HEADER *FvHeader;\r
EFI_COMPRESSION_SECTION *CompressionSection;\r
EFI_FFS_FILE_HEADER *FfsFileHeader;\r
- \r
+\r
FfsFileHeader = *RealFfsFileHeader;\r
\r
Status = PeiServicesFfsFindSectionData (\r