/** @file\r
Locate the entry point for the PEI Core\r
\r
- Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>\r
- 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
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+ Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include <PiPei.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/PeCoffGetEntryPointLib.h>\r
\r
#include "SecMain.h"\r
\r
/**\r
Find core image base.\r
\r
- @param BootFirmwareVolumePtr Point to the boot firmware volume.\r
- @param SecCoreImageBase The base address of the SEC core image.\r
- @param PeiCoreImageBase The base address of the PEI core image.\r
+ @param FirmwareVolumePtr Point to the firmware volume for finding core image.\r
+ @param FileType The FileType for searching, either SecCore or PeiCore.\r
+ @param CoreImageBase The base address of the core image.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
FindImageBase (\r
- IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr,\r
- OUT EFI_PHYSICAL_ADDRESS *SecCoreImageBase,\r
- OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase\r
+ IN EFI_FIRMWARE_VOLUME_HEADER *FirmwareVolumePtr,\r
+ IN EFI_FV_FILETYPE FileType,\r
+ OUT EFI_PHYSICAL_ADDRESS *CoreImageBase\r
)\r
{\r
EFI_PHYSICAL_ADDRESS CurrentAddress;\r
EFI_COMMON_SECTION_HEADER *Section;\r
EFI_PHYSICAL_ADDRESS EndOfSection;\r
\r
- *SecCoreImageBase = 0;\r
- *PeiCoreImageBase = 0;\r
+ *CoreImageBase = 0;\r
\r
- CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) BootFirmwareVolumePtr;\r
- EndOfFirmwareVolume = CurrentAddress + BootFirmwareVolumePtr->FvLength;\r
+ CurrentAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) FirmwareVolumePtr;\r
+ EndOfFirmwareVolume = CurrentAddress + FirmwareVolumePtr->FvLength;\r
\r
//\r
// Loop through the FFS files in the Boot Firmware Volume\r
//\r
- for (EndOfFile = CurrentAddress + BootFirmwareVolumePtr->HeaderLength; ; ) {\r
+ for (EndOfFile = CurrentAddress + FirmwareVolumePtr->HeaderLength; ; ) {\r
\r
CurrentAddress = (EndOfFile + 7) & 0xfffffffffffffff8ULL;\r
if (CurrentAddress > EndOfFirmwareVolume) {\r
}\r
\r
//\r
- // Look for SEC Core / PEI Core files\r
+ // Look for particular Core file (either SEC Core or PEI Core)\r
//\r
- if (File->Type != EFI_FV_FILETYPE_SECURITY_CORE &&\r
- File->Type != EFI_FV_FILETYPE_PEI_CORE) {\r
+ if (File->Type != FileType) {\r
continue;\r
}\r
\r
// Look for executable sections\r
//\r
if (Section->Type == EFI_SECTION_PE32 || Section->Type == EFI_SECTION_TE) {\r
- if (File->Type == EFI_FV_FILETYPE_SECURITY_CORE) {\r
- if (IS_SECTION2 (Section)) {\r
- *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
- } else {\r
- *SecCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
- }\r
- } else {\r
+ if (File->Type == FileType) {\r
if (IS_SECTION2 (Section)) {\r
- *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
+ *CoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER2));\r
} else {\r
- *PeiCoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
+ *CoreImageBase = (PHYSICAL_ADDRESS) (UINTN) ((UINT8 *) Section + sizeof (EFI_COMMON_SECTION_HEADER));\r
}\r
}\r
break;\r
}\r
\r
//\r
- // Both SEC Core and PEI Core images found\r
+ // Either SEC Core or PEI Core images found\r
//\r
- if (*SecCoreImageBase != 0 && *PeiCoreImageBase != 0) {\r
+ if (*CoreImageBase != 0) {\r
return EFI_SUCCESS;\r
}\r
}\r
It also find SEC and PEI Core file debug information. It will report them if\r
remote debug is enabled.\r
\r
- @param BootFirmwareVolumePtr Point to the boot firmware volume.\r
+ @param SecCoreFirmwareVolumePtr Point to the firmware volume for finding SecCore.\r
+ @param PeiCoreFirmwareVolumePtr Point to the firmware volume for finding PeiCore.\r
@param PeiCoreEntryPoint The entry point of the PEI core.\r
\r
**/\r
VOID\r
EFIAPI\r
FindAndReportEntryPoints (\r
- IN EFI_FIRMWARE_VOLUME_HEADER *BootFirmwareVolumePtr,\r
+ IN EFI_FIRMWARE_VOLUME_HEADER *SecCoreFirmwareVolumePtr,\r
+ IN EFI_FIRMWARE_VOLUME_HEADER *PeiCoreFirmwareVolumePtr,\r
OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint\r
)\r
{\r
PE_COFF_LOADER_IMAGE_CONTEXT ImageContext;\r
\r
//\r
- // Find SEC Core and PEI Core image base\r
+ // Find SEC Core image base\r
//\r
- Status = FindImageBase (BootFirmwareVolumePtr, &SecCoreImageBase, &PeiCoreImageBase);\r
+ Status = FindImageBase (SecCoreFirmwareVolumePtr, EFI_FV_FILETYPE_SECURITY_CORE, &SecCoreImageBase);\r
ASSERT_EFI_ERROR (Status);\r
\r
ZeroMem ((VOID *) &ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));\r
ImageContext.PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageContext.ImageAddress);\r
PeCoffLoaderRelocateImageExtraAction (&ImageContext);\r
\r
+ //\r
+ // Find PEI Core image base\r
+ //\r
+ Status = FindImageBase (PeiCoreFirmwareVolumePtr, EFI_FV_FILETYPE_PEI_CORE, &PeiCoreImageBase);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
//\r
// Report PEI Core debug information when remote debug is enabled\r
//\r