X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkModulePkg%2FCore%2FDxeIplPeim%2FDxeLoad.c;h=8e1aeedac261b4ae56bb736e9ebffaa817cb4c9c;hp=78008412759d21419033611e5ad08e952a8ddd66;hb=2934f5b0674d3094b329d9347f9d343ec3395bb3;hpb=84a99d48f4d59e0cf59b6d55328c35225c00246d diff --git a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c index 7800841275..8e1aeedac2 100644 --- a/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c +++ b/EdkModulePkg/Core/DxeIplPeim/DxeLoad.c @@ -130,7 +130,7 @@ Returns: NULL ); - if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) { + if (EFI_ERROR (Status) && (BootMode != BOOT_ON_S3_RESUME)) { // // The DxeIpl has not yet been shadowed // @@ -320,7 +320,10 @@ Returns: ASSERT_EFI_ERROR (Status); Status = PeiRecovery->LoadRecoveryCapsule (PeiServices, PeiRecovery); - ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + DEBUG ((EFI_D_ERROR, "Load Recovery Capsule Failed.(Status = %r)\n", Status)); + CpuDeadLoop (); + } // // Now should have a HOB with the DXE core w/ the old HOB destroyed @@ -371,7 +374,6 @@ Returns: // Transfer control to the DXE Core // The handoff state is simply a pointer to the HOB list // -// PERF_END (PeiServices, L"DxeIpl", NULL, 0); Status = PeiServicesInstallPpi (&mPpiSignal); @@ -396,17 +398,20 @@ Returns: ); DEBUG ((EFI_D_INFO, "DXE Core Entry\n")); - SwitchStack ( + SwitchIplStacks ( (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, HobList.Raw, - (VOID *) (UINTN) BspStore, - TopOfStack + NULL, + TopOfStack, + (VOID *) (UINTN) BspStore ); // // If we get here, then the DXE Core returned. This is an error + // Dxe Core should not return. // - ASSERT_EFI_ERROR (Status); + ASSERT (FALSE); + CpuDeadLoop (); return EFI_OUT_OF_RESOURCES; } @@ -470,12 +475,12 @@ Returns: &FfsFileHeader ); if (!EFI_ERROR (Status)) { - CopyMem (FileName, &FfsFileHeader->Name, sizeof (EFI_GUID)); Status = PeiProcessFile ( SectionType, - FfsFileHeader, + &FfsFileHeader, Pe32Data ); + CopyMem (FileName, &FfsFileHeader->Name, sizeof (EFI_GUID)); return Status; } Hob.Raw = GET_NEXT_HOB (Hob); @@ -683,7 +688,7 @@ Returns: // Status = PeiProcessFile ( EFI_SECTION_PE32, - FfsHeader, + &FfsHeader, &Pe32Data ); @@ -706,9 +711,9 @@ Returns: EFI_STATUS PeiProcessFile ( - IN UINT16 SectionType, - IN EFI_FFS_FILE_HEADER *FfsFileHeader, - OUT VOID **Pe32Data + IN UINT16 SectionType, + IN OUT EFI_FFS_FILE_HEADER **RealFfsFileHeader, + OUT VOID **Pe32Data ) /*++ @@ -756,6 +761,9 @@ Returns: EFI_GUID TempGuid; EFI_FIRMWARE_VOLUME_HEADER *FvHeader; EFI_COMPRESSION_SECTION *CompressionSection; + EFI_FFS_FILE_HEADER *FfsFileHeader; + + FfsFileHeader = *RealFfsFileHeader; Status = PeiServicesFfsFindSectionData ( EFI_SECTION_COMPRESSION, @@ -950,7 +958,11 @@ Returns: return EFI_NOT_FOUND; } - return PeiProcessFile (SectionType, FfsFileHeader, Pe32Data); + // + // Reture the FfsHeader that contain Pe32Data. + // + *RealFfsFileHeader = FfsFileHeader; + return PeiProcessFile (SectionType, RealFfsFileHeader, Pe32Data); } } //