summaryrefslogtreecommitdiff
path: root/MdePkg/Library/BasePeCoffGetEntryPointLib
diff options
context:
space:
mode:
Diffstat (limited to 'MdePkg/Library/BasePeCoffGetEntryPointLib')
-rw-r--r--MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa1
-rw-r--r--MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c31
2 files changed, 22 insertions, 10 deletions
diff --git a/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa b/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa
index 1f92c24449..e8cc214548 100644
--- a/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa
+++ b/MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.msa
@@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
</MsaLibHeader>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">PeCoffGetEntryPointLib</LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">DebugLib</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename>PeCoffGetEntryPoint.c</Filename>
diff --git a/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c b/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c
index d5ff7db009..b740bd6e7c 100644
--- a/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c
+++ b/MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c
@@ -17,38 +17,49 @@
/**
- Loads a PE/COFF image into memory.
+ Retrieves and returns a pointer to the entry point to a PE/COFF image that has been loaded
+ into system memory with the PE/COFF Loader Library functions.
- @param Pe32Data Pointer to a PE/COFF Image
-
- @param EntryPoint Pointer to the entry point of the PE/COFF image
+ Retrieves the entry point to the PE/COFF image specified by Pe32Data and returns this entry
+ point in EntryPoint. If the entry point could not be retrieved from the PE/COFF image, then
+ return RETURN_INVALID_PARAMETER. Otherwise return RETURN_SUCCESS.
+ If Pe32Data is NULL, then ASSERT().
+ If EntryPoint is NULL, then ASSERT().
- @retval EFI_SUCCESS if the EntryPoint was returned
- @retval EFI_INVALID_PARAMETER if the EntryPoint could not be found from Pe32Data
+ @param Pe32Data Pointer to the PE/COFF image that is loaded in system memory.
+ @param EntryPoint Pointer to entry point to the PE/COFF image to return.
+
+ @retval RETURN_SUCCESS EntryPoint was returned.
+ @retval RETURN_INVALID_PARAMETER The entry point could not be found in the PE/COFF image.
**/
RETURN_STATUS
EFIAPI
PeCoffLoaderGetEntryPoint (
- IN VOID *Pe32Data,
- IN OUT VOID **EntryPoint
+ IN VOID *Pe32Data,
+ OUT VOID **EntryPoint
)
{
EFI_IMAGE_DOS_HEADER *DosHeader;
EFI_IMAGE_NT_HEADERS *PeHeader;
+ ASSERT (Pe32Data != NULL);
+ ASSERT (EntryPoint != NULL);
+
DosHeader = (EFI_IMAGE_DOS_HEADER *)Pe32Data;
+
if (DosHeader->e_magic == EFI_IMAGE_DOS_SIGNATURE) {
//
- // DOS image header is present, so read the PE header after the DOS image header
+ // DOS image header is present, so read the PE header after the DOS image header.
//
PeHeader = (EFI_IMAGE_NT_HEADERS *) ((UINTN) Pe32Data + (UINTN) ((DosHeader->e_lfanew) & 0x0ffff));
} else {
//
- // DOS image header is not present, so PE header is at the image base
+ // DOS image header is not present, so PE header is at the image base.
//
PeHeader = (EFI_IMAGE_NT_HEADERS *) Pe32Data;
}
+
*EntryPoint = (VOID *) ((UINTN) Pe32Data + (UINTN) (PeHeader->OptionalHeader.AddressOfEntryPoint & 0x0ffffffff));
return RETURN_SUCCESS;
}