StandaloneMmPkg/StandaloneMmCoreEntryPoint: relocate StMM core on the fly
Apply PE/COFF fixups when starting up the standalone MM core, so that it can execute at any address regardless of the link time address. Note that this requires the PE/COFF image to be emitted with its relocation section preserved. Special care is taken to ensure that TE images are dealt with correctly as well. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Acked-by: Jiewen Yao <Jiewen.yao@intel.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
committed by
mergify[bot]
parent
cdc686223a
commit
493f2c6931
@@ -71,6 +71,7 @@ typedef RETURN_STATUS (*REGION_PERMISSION_UPDATE_FUNC) (
|
||||
and make further progress in the boot process.
|
||||
|
||||
@param ImageContext Pointer to PE/COFF image context
|
||||
@param ImageBase Base of image in memory
|
||||
@param SectionHeaderOffset Offset of PE/COFF image section header
|
||||
@param NumberOfSections Number of Sections
|
||||
@param TextUpdater Function to change code permissions
|
||||
@@ -82,6 +83,7 @@ EFI_STATUS
|
||||
EFIAPI
|
||||
UpdateMmFoundationPeCoffPermissions (
|
||||
IN CONST PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
|
||||
IN EFI_PHYSICAL_ADDRESS ImageBase,
|
||||
IN UINT32 SectionHeaderOffset,
|
||||
IN CONST UINT16 NumberOfSections,
|
||||
IN REGION_PERMISSION_UPDATE_FUNC TextUpdater,
|
||||
@@ -98,6 +100,7 @@ UpdateMmFoundationPeCoffPermissions (
|
||||
|
||||
@param TeData Pointer to PE/COFF image data
|
||||
@param ImageContext Pointer to PE/COFF image context
|
||||
@param ImageBase Pointer to ImageBase variable
|
||||
@param SectionHeaderOffset Offset of PE/COFF image section header
|
||||
@param NumberOfSections Number of Sections
|
||||
|
||||
@@ -107,6 +110,7 @@ EFIAPI
|
||||
GetStandaloneMmCorePeCoffSections (
|
||||
IN VOID *TeData,
|
||||
IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext,
|
||||
OUT EFI_PHYSICAL_ADDRESS *ImageBase,
|
||||
IN OUT UINT32 *SectionHeaderOffset,
|
||||
IN OUT UINT16 *NumberOfSections
|
||||
);
|
||||
|
Reference in New Issue
Block a user