The DstBuffer and NumberOfPages arguments to CoreLoadImageCommon () are
never set by its only caller CoreLoadImage() so let's drop them from the
prototype.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
MdeModulePkg/Core/Dxe/Image/Image.c | 174 +++++++-------------
1 file changed, 56 insertions(+), 118 deletions(-)
diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c b/MdeModulePkg/Core/Dxe/Image/Image.c
index 2f2dfe5d0496dc4f..6625d0cd0ff82107 100644
--- a/MdeModulePkg/Core/Dxe/Image/Image.c
+++ b/MdeModulePkg/Core/Dxe/Image/Image.c
@@ -559,7 +559,6 @@ CoreIsImageTypeSupported (
boot selection.
@param Pe32Handle The handle of PE32 image
@param Image PE image to be loaded
- @param DstBuffer The buffer to store the image
@param Attribute The bit mask of attributes to set for the load
PE image
@@ -570,17 +569,16 @@ CoreIsImageTypeSupported (
@retval EFI_BUFFER_TOO_SMALL Buffer for image is too small
**/
+STATIC
EFI_STATUS
CoreLoadPeImage (
IN BOOLEAN BootPolicy,
IN VOID *Pe32Handle,
IN LOADED_IMAGE_PRIVATE_DATA *Image,
- IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL,
IN UINT32 Attribute
)
{
EFI_STATUS Status;
- BOOLEAN DstBufAlocated;
UINTN Size;
ZeroMem (&Image->ImageContext, sizeof (Image->ImageContext));
@@ -633,99 +631,67 @@ CoreLoadPeImage (
}
//
- // Allocate memory of the correct memory type aligned on the required image boundary
+ // Allocate Destination Buffer as caller did not pass it in
//
- DstBufAlocated = FALSE;
- if (DstBuffer == 0) {
- //
- // Allocate Destination Buffer as caller did not pass it in
- //
- if (Image->ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
- Size = (UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment;
- } else {
- Size = (UINTN)Image->ImageContext.ImageSize;
- }
+ if (Image->ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
+ Size = (UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment;
+ } else {
+ Size = (UINTN)Image->ImageContext.ImageSize;
+ }
- Image->NumberOfPages = EFI_SIZE_TO_PAGES (Size);
+ Image->NumberOfPages = EFI_SIZE_TO_PAGES (Size);
- //
- // If the image relocations have not been stripped, then load at any address.
- // Otherwise load at the address at which it was linked.
- //
- // Memory below 1MB should be treated reserved for CSM and there should be
- // no modules whose preferred load addresses are below 1MB.
- //
- Status = EFI_OUT_OF_RESOURCES;
- //
- // If Loading Module At Fixed Address feature is enabled, the module should be loaded to
- // a specified address.
- //
- if (PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0 ) {
- Status = GetPeCoffImageFixLoadingAssignedAddress (&(Image->ImageContext));
-
- if (EFI_ERROR (Status)) {
- //
- // If the code memory is not ready, invoke CoreAllocatePage with AllocateAnyPages to load the driver.
- //
- DEBUG ((DEBUG_INFO|DEBUG_LOAD, "LOADING MODULE FIXED ERROR: Loading module at fixed address failed since specified memory is not available.\n"));
-
- Status = CoreAllocatePages (
- AllocateAnyPages,
- (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
- Image->NumberOfPages,
- &Image->ImageContext.ImageAddress
- );
- }
- } else {
- if ((Image->ImageContext.ImageAddress >= 0x100000) || Image->ImageContext.RelocationsStripped) {
- Status = CoreAllocatePages (
- AllocateAddress,
- (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
- Image->NumberOfPages,
- &Image->ImageContext.ImageAddress
- );
- }
-
- if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {
- Status = CoreAllocatePages (
- AllocateAnyPages,
- (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
- Image->NumberOfPages,
- &Image->ImageContext.ImageAddress
- );
- }
- }
+ //
+ // If the image relocations have not been stripped, then load at any address.
+ // Otherwise load at the address at which it was linked.
+ //
+ // Memory below 1MB should be treated reserved for CSM and there should be
+ // no modules whose preferred load addresses are below 1MB.
+ //
+ Status = EFI_OUT_OF_RESOURCES;
+ //
+ // If Loading Module At Fixed Address feature is enabled, the module should be loaded to
+ // a specified address.
+ //
+ if (PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0 ) {
+ Status = GetPeCoffImageFixLoadingAssignedAddress (&(Image->ImageContext));
if (EFI_ERROR (Status)) {
- return Status;
- }
+ //
+ // If the code memory is not ready, invoke CoreAllocatePage with AllocateAnyPages to load the driver.
+ //
+ DEBUG ((DEBUG_INFO|DEBUG_LOAD, "LOADING MODULE FIXED ERROR: Loading module at fixed address failed since specified memory is not available.\n"));
- DstBufAlocated = TRUE;
+ Status = CoreAllocatePages (
+ AllocateAnyPages,
+ (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
+ Image->NumberOfPages,
+ &Image->ImageContext.ImageAddress
+ );
+ }
} else {
- //
- // Caller provided the destination buffer
- //
-
- if (Image->ImageContext.RelocationsStripped && (Image->ImageContext.ImageAddress != DstBuffer)) {
- //
- // If the image relocations were stripped, and the caller provided a
- // destination buffer address that does not match the address that the
- // image is linked at, then the image cannot be loaded.
- //
- return EFI_INVALID_PARAMETER;
+ if ((Image->ImageContext.ImageAddress >= 0x100000) || Image->ImageContext.RelocationsStripped) {
+ Status = CoreAllocatePages (
+ AllocateAddress,
+ (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
+ Image->NumberOfPages,
+ &Image->ImageContext.ImageAddress
+ );
}
- if ((Image->NumberOfPages != 0) &&
- (Image->NumberOfPages <
- (EFI_SIZE_TO_PAGES ((UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment))))
- {
- Image->NumberOfPages = EFI_SIZE_TO_PAGES ((UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
- return EFI_BUFFER_TOO_SMALL;
+ if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {
+ Status = CoreAllocatePages (
+ AllocateAnyPages,
+ (EFI_MEMORY_TYPE)(Image->ImageContext.ImageCodeMemoryType),
+ Image->NumberOfPages,
+ &Image->ImageContext.ImageAddress
+ );
}
+ }
- Image->NumberOfPages = EFI_SIZE_TO_PAGES ((UINTN)Image->ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
- Image->ImageContext.ImageAddress = DstBuffer;
+ if (EFI_ERROR (Status)) {
+ return Status;
}
Image->ImageBasePage = Image->ImageContext.ImageAddress;
@@ -875,12 +841,9 @@ CoreLoadPeImage (
//
// Free memory.
//
-
- if (DstBufAlocated) {
- CoreFreePages (Image->ImageContext.ImageAddress, Image->NumberOfPages);
- Image->ImageContext.ImageAddress = 0;
- Image->ImageBasePage = 0;
- }
+ CoreFreePages (Image->ImageContext.ImageAddress, Image->NumberOfPages);
+ Image->ImageContext.ImageAddress = 0;
+ Image->ImageBasePage = 0;
if (Image->ImageContext.FixupData != NULL) {
CoreFreePool (Image->ImageContext.FixupData);
@@ -1094,12 +1057,6 @@ CoreUnloadAndCloseImage (
@param SourceBuffer If not NULL, a pointer to the memory location
containing a copy of the image to be loaded.
@param SourceSize The size in bytes of SourceBuffer.
- @param DstBuffer The buffer to store the image
- @param NumberOfPages If not NULL, it inputs a pointer to the page
- number of DstBuffer and outputs a pointer to
- the page number of the image. If this number is
- not enough, return EFI_BUFFER_TOO_SMALL and
- this parameter contains the required number.
@param ImageHandle Pointer to the returned image handle that is
created when the image is successfully loaded.
@param Attribute The bit mask of attributes to set for the load
@@ -1132,8 +1089,6 @@ CoreLoadImageCommon (
IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
IN VOID *SourceBuffer OPTIONAL,
IN UINTN SourceSize,
- IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL,
- IN OUT UINTN *NumberOfPages OPTIONAL,
OUT EFI_HANDLE *ImageHandle,
IN UINT32 Attribute
)
@@ -1342,12 +1297,7 @@ CoreLoadImageCommon (
Image->Info.Revision = EFI_LOADED_IMAGE_PROTOCOL_REVISION;
Image->Info.FilePath = DuplicateDevicePath (FilePath);
Image->Info.ParentHandle = ParentImageHandle;
-
- if (NumberOfPages != NULL) {
- Image->NumberOfPages = *NumberOfPages;
- } else {
- Image->NumberOfPages = 0;
- }
+ Image->NumberOfPages = 0;
//
// Install the protocol interfaces for this image
@@ -1367,21 +1317,11 @@ CoreLoadImageCommon (
//
// Load the image.
//
- Status = CoreLoadPeImage (BootPolicy, &FHand, Image, DstBuffer, Attribute);
+ Status = CoreLoadPeImage (BootPolicy, &FHand, Image, Attribute);
if (EFI_ERROR (Status)) {
- if ((Status == EFI_BUFFER_TOO_SMALL) || (Status == EFI_OUT_OF_RESOURCES)) {
- if (NumberOfPages != NULL) {
- *NumberOfPages = Image->NumberOfPages;
- }
- }
-
goto Done;
}
- if (NumberOfPages != NULL) {
- *NumberOfPages = Image->NumberOfPages;
- }
-
//
// Register the image in the Debug Image Info Table if the attribute is set
//
@@ -1473,7 +1413,7 @@ CoreLoadImageCommon (
//
if (EFI_ERROR (Status)) {
if (Image != NULL) {
- CoreUnloadAndCloseImage (Image, (BOOLEAN)(DstBuffer == 0));
+ CoreUnloadAndCloseImage (Image, TRUE);
Image = NULL;
}
} else if (EFI_ERROR (SecurityStatus)) {
@@ -1546,8 +1486,6 @@ CoreLoadImage (
FilePath,
SourceBuffer,
SourceSize,
- (EFI_PHYSICAL_ADDRESS)(UINTN)NULL,
- NULL,
ImageHandle,
EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION | EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION
);
--
2.39.2
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105364): https://edk2.groups.io/g/devel/message/105364
Mute This Topic: https://groups.io/mt/99197134/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Ray Ni <ray.ni@intel.com>
One comment regarding the needing of "static".
(I saw you added static" to CoreLoadPeImage in this patch😊)
But let's discuss in the first patch thread.
> -----Original Message-----
> From: Ard Biesheuvel <ardb@kernel.org>
> Sent: Monday, May 29, 2023 6:17 PM
> To: devel@edk2.groups.io
> Cc: Ard Biesheuvel <ardb@kernel.org>; Ni, Ray <ray.ni@intel.com>; Yao, Jiewen
> <jiewen.yao@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Taylor Beebe
> <t@taylorbeebe.com>; Oliver Smith-Denny <osd@smith-denny.com>; Bi, Dandan
> <dandan.bi@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Kinney,
> Michael D <michael.d.kinney@intel.com>; Leif Lindholm
> <quic_llindhol@quicinc.com>; Michael Kubacki <mikuback@linux.microsoft.com>
> Subject: [RFC PATCH 02/11] MdeModulePkg/DxeCore: Remove unused DstBuffer
> arg from LoadImage
>
> The DstBuffer and NumberOfPages arguments to CoreLoadImageCommon () are
> never set by its only caller CoreLoadImage() so let's drop them from the
> prototype.
>
> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
> ---
> MdeModulePkg/Core/Dxe/Image/Image.c | 174 +++++++-------------
> 1 file changed, 56 insertions(+), 118 deletions(-)
>
> diff --git a/MdeModulePkg/Core/Dxe/Image/Image.c
> b/MdeModulePkg/Core/Dxe/Image/Image.c
> index 2f2dfe5d0496dc4f..6625d0cd0ff82107 100644
> --- a/MdeModulePkg/Core/Dxe/Image/Image.c
> +++ b/MdeModulePkg/Core/Dxe/Image/Image.c
> @@ -559,7 +559,6 @@ CoreIsImageTypeSupported (
> boot selection.
>
> @param Pe32Handle The handle of PE32 image
>
> @param Image PE image to be loaded
>
> - @param DstBuffer The buffer to store the image
>
> @param Attribute The bit mask of attributes to set for the load
>
> PE image
>
>
>
> @@ -570,17 +569,16 @@ CoreIsImageTypeSupported (
> @retval EFI_BUFFER_TOO_SMALL Buffer for image is too small
>
>
>
> **/
>
> +STATIC
>
> EFI_STATUS
>
> CoreLoadPeImage (
>
> IN BOOLEAN BootPolicy,
>
> IN VOID *Pe32Handle,
>
> IN LOADED_IMAGE_PRIVATE_DATA *Image,
>
> - IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL,
>
> IN UINT32 Attribute
>
> )
>
> {
>
> EFI_STATUS Status;
>
> - BOOLEAN DstBufAlocated;
>
> UINTN Size;
>
>
>
> ZeroMem (&Image->ImageContext, sizeof (Image->ImageContext));
>
> @@ -633,99 +631,67 @@ CoreLoadPeImage (
> }
>
>
>
> //
>
> - // Allocate memory of the correct memory type aligned on the required image
> boundary
>
> + // Allocate Destination Buffer as caller did not pass it in
>
> //
>
> - DstBufAlocated = FALSE;
>
> - if (DstBuffer == 0) {
>
> - //
>
> - // Allocate Destination Buffer as caller did not pass it in
>
> - //
>
>
>
> - if (Image->ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
>
> - Size = (UINTN)Image->ImageContext.ImageSize + Image-
> >ImageContext.SectionAlignment;
>
> - } else {
>
> - Size = (UINTN)Image->ImageContext.ImageSize;
>
> - }
>
> + if (Image->ImageContext.SectionAlignment > EFI_PAGE_SIZE) {
>
> + Size = (UINTN)Image->ImageContext.ImageSize + Image-
> >ImageContext.SectionAlignment;
>
> + } else {
>
> + Size = (UINTN)Image->ImageContext.ImageSize;
>
> + }
>
>
>
> - Image->NumberOfPages = EFI_SIZE_TO_PAGES (Size);
>
> + Image->NumberOfPages = EFI_SIZE_TO_PAGES (Size);
>
>
>
> - //
>
> - // If the image relocations have not been stripped, then load at any address.
>
> - // Otherwise load at the address at which it was linked.
>
> - //
>
> - // Memory below 1MB should be treated reserved for CSM and there should
> be
>
> - // no modules whose preferred load addresses are below 1MB.
>
> - //
>
> - Status = EFI_OUT_OF_RESOURCES;
>
> - //
>
> - // If Loading Module At Fixed Address feature is enabled, the module should be
> loaded to
>
> - // a specified address.
>
> - //
>
> - if (PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0 ) {
>
> - Status = GetPeCoffImageFixLoadingAssignedAddress (&(Image-
> >ImageContext));
>
> -
>
> - if (EFI_ERROR (Status)) {
>
> - //
>
> - // If the code memory is not ready, invoke CoreAllocatePage with
> AllocateAnyPages to load the driver.
>
> - //
>
> - DEBUG ((DEBUG_INFO|DEBUG_LOAD, "LOADING MODULE FIXED ERROR:
> Loading module at fixed address failed since specified memory is not
> available.\n"));
>
> -
>
> - Status = CoreAllocatePages (
>
> - AllocateAnyPages,
>
> - (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> - Image->NumberOfPages,
>
> - &Image->ImageContext.ImageAddress
>
> - );
>
> - }
>
> - } else {
>
> - if ((Image->ImageContext.ImageAddress >= 0x100000) || Image-
> >ImageContext.RelocationsStripped) {
>
> - Status = CoreAllocatePages (
>
> - AllocateAddress,
>
> - (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> - Image->NumberOfPages,
>
> - &Image->ImageContext.ImageAddress
>
> - );
>
> - }
>
> -
>
> - if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {
>
> - Status = CoreAllocatePages (
>
> - AllocateAnyPages,
>
> - (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> - Image->NumberOfPages,
>
> - &Image->ImageContext.ImageAddress
>
> - );
>
> - }
>
> - }
>
> + //
>
> + // If the image relocations have not been stripped, then load at any address.
>
> + // Otherwise load at the address at which it was linked.
>
> + //
>
> + // Memory below 1MB should be treated reserved for CSM and there should be
>
> + // no modules whose preferred load addresses are below 1MB.
>
> + //
>
> + Status = EFI_OUT_OF_RESOURCES;
>
> + //
>
> + // If Loading Module At Fixed Address feature is enabled, the module should be
> loaded to
>
> + // a specified address.
>
> + //
>
> + if (PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0 ) {
>
> + Status = GetPeCoffImageFixLoadingAssignedAddress (&(Image-
> >ImageContext));
>
>
>
> if (EFI_ERROR (Status)) {
>
> - return Status;
>
> - }
>
> + //
>
> + // If the code memory is not ready, invoke CoreAllocatePage with
> AllocateAnyPages to load the driver.
>
> + //
>
> + DEBUG ((DEBUG_INFO|DEBUG_LOAD, "LOADING MODULE FIXED ERROR:
> Loading module at fixed address failed since specified memory is not
> available.\n"));
>
>
>
> - DstBufAlocated = TRUE;
>
> + Status = CoreAllocatePages (
>
> + AllocateAnyPages,
>
> + (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> + Image->NumberOfPages,
>
> + &Image->ImageContext.ImageAddress
>
> + );
>
> + }
>
> } else {
>
> - //
>
> - // Caller provided the destination buffer
>
> - //
>
> -
>
> - if (Image->ImageContext.RelocationsStripped && (Image-
> >ImageContext.ImageAddress != DstBuffer)) {
>
> - //
>
> - // If the image relocations were stripped, and the caller provided a
>
> - // destination buffer address that does not match the address that the
>
> - // image is linked at, then the image cannot be loaded.
>
> - //
>
> - return EFI_INVALID_PARAMETER;
>
> + if ((Image->ImageContext.ImageAddress >= 0x100000) || Image-
> >ImageContext.RelocationsStripped) {
>
> + Status = CoreAllocatePages (
>
> + AllocateAddress,
>
> + (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> + Image->NumberOfPages,
>
> + &Image->ImageContext.ImageAddress
>
> + );
>
> }
>
>
>
> - if ((Image->NumberOfPages != 0) &&
>
> - (Image->NumberOfPages <
>
> - (EFI_SIZE_TO_PAGES ((UINTN)Image->ImageContext.ImageSize + Image-
> >ImageContext.SectionAlignment))))
>
> - {
>
> - Image->NumberOfPages = EFI_SIZE_TO_PAGES ((UINTN)Image-
> >ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
>
> - return EFI_BUFFER_TOO_SMALL;
>
> + if (EFI_ERROR (Status) && !Image->ImageContext.RelocationsStripped) {
>
> + Status = CoreAllocatePages (
>
> + AllocateAnyPages,
>
> + (EFI_MEMORY_TYPE)(Image-
> >ImageContext.ImageCodeMemoryType),
>
> + Image->NumberOfPages,
>
> + &Image->ImageContext.ImageAddress
>
> + );
>
> }
>
> + }
>
>
>
> - Image->NumberOfPages = EFI_SIZE_TO_PAGES ((UINTN)Image-
> >ImageContext.ImageSize + Image->ImageContext.SectionAlignment);
>
> - Image->ImageContext.ImageAddress = DstBuffer;
>
> + if (EFI_ERROR (Status)) {
>
> + return Status;
>
> }
>
>
>
> Image->ImageBasePage = Image->ImageContext.ImageAddress;
>
> @@ -875,12 +841,9 @@ CoreLoadPeImage (
> //
>
> // Free memory.
>
> //
>
> -
>
> - if (DstBufAlocated) {
>
> - CoreFreePages (Image->ImageContext.ImageAddress, Image-
> >NumberOfPages);
>
> - Image->ImageContext.ImageAddress = 0;
>
> - Image->ImageBasePage = 0;
>
> - }
>
> + CoreFreePages (Image->ImageContext.ImageAddress, Image-
> >NumberOfPages);
>
> + Image->ImageContext.ImageAddress = 0;
>
> + Image->ImageBasePage = 0;
>
>
>
> if (Image->ImageContext.FixupData != NULL) {
>
> CoreFreePool (Image->ImageContext.FixupData);
>
> @@ -1094,12 +1057,6 @@ CoreUnloadAndCloseImage (
> @param SourceBuffer If not NULL, a pointer to the memory location
>
> containing a copy of the image to be loaded.
>
> @param SourceSize The size in bytes of SourceBuffer.
>
> - @param DstBuffer The buffer to store the image
>
> - @param NumberOfPages If not NULL, it inputs a pointer to the page
>
> - number of DstBuffer and outputs a pointer to
>
> - the page number of the image. If this number is
>
> - not enough, return EFI_BUFFER_TOO_SMALL and
>
> - this parameter contains the required number.
>
> @param ImageHandle Pointer to the returned image handle that is
>
> created when the image is successfully loaded.
>
> @param Attribute The bit mask of attributes to set for the load
>
> @@ -1132,8 +1089,6 @@ CoreLoadImageCommon (
> IN EFI_DEVICE_PATH_PROTOCOL *FilePath,
>
> IN VOID *SourceBuffer OPTIONAL,
>
> IN UINTN SourceSize,
>
> - IN EFI_PHYSICAL_ADDRESS DstBuffer OPTIONAL,
>
> - IN OUT UINTN *NumberOfPages OPTIONAL,
>
> OUT EFI_HANDLE *ImageHandle,
>
> IN UINT32 Attribute
>
> )
>
> @@ -1342,12 +1297,7 @@ CoreLoadImageCommon (
> Image->Info.Revision = EFI_LOADED_IMAGE_PROTOCOL_REVISION;
>
> Image->Info.FilePath = DuplicateDevicePath (FilePath);
>
> Image->Info.ParentHandle = ParentImageHandle;
>
> -
>
> - if (NumberOfPages != NULL) {
>
> - Image->NumberOfPages = *NumberOfPages;
>
> - } else {
>
> - Image->NumberOfPages = 0;
>
> - }
>
> + Image->NumberOfPages = 0;
>
>
>
> //
>
> // Install the protocol interfaces for this image
>
> @@ -1367,21 +1317,11 @@ CoreLoadImageCommon (
> //
>
> // Load the image.
>
> //
>
> - Status = CoreLoadPeImage (BootPolicy, &FHand, Image, DstBuffer, Attribute);
>
> + Status = CoreLoadPeImage (BootPolicy, &FHand, Image, Attribute);
>
> if (EFI_ERROR (Status)) {
>
> - if ((Status == EFI_BUFFER_TOO_SMALL) || (Status ==
> EFI_OUT_OF_RESOURCES)) {
>
> - if (NumberOfPages != NULL) {
>
> - *NumberOfPages = Image->NumberOfPages;
>
> - }
>
> - }
>
> -
>
> goto Done;
>
> }
>
>
>
> - if (NumberOfPages != NULL) {
>
> - *NumberOfPages = Image->NumberOfPages;
>
> - }
>
> -
>
> //
>
> // Register the image in the Debug Image Info Table if the attribute is set
>
> //
>
> @@ -1473,7 +1413,7 @@ CoreLoadImageCommon (
> //
>
> if (EFI_ERROR (Status)) {
>
> if (Image != NULL) {
>
> - CoreUnloadAndCloseImage (Image, (BOOLEAN)(DstBuffer == 0));
>
> + CoreUnloadAndCloseImage (Image, TRUE);
>
> Image = NULL;
>
> }
>
> } else if (EFI_ERROR (SecurityStatus)) {
>
> @@ -1546,8 +1486,6 @@ CoreLoadImage (
> FilePath,
>
> SourceBuffer,
>
> SourceSize,
>
> - (EFI_PHYSICAL_ADDRESS)(UINTN)NULL,
>
> - NULL,
>
> ImageHandle,
>
> EFI_LOAD_PE_IMAGE_ATTRIBUTE_RUNTIME_REGISTRATION |
> EFI_LOAD_PE_IMAGE_ATTRIBUTE_DEBUG_IMAGE_INFO_TABLE_REGISTRATION
>
> );
>
> --
> 2.39.2
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#105406): https://edk2.groups.io/g/devel/message/105406
Mute This Topic: https://groups.io/mt/99197134/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/3901457/1787277/102458076/xyzzy [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.