X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=EdkUnixPkg%2FLibrary%2FEdkUnixPeiPeCoffGetEntryPointLib%2FPeCoffGetEntryPoint.c;fp=EdkUnixPkg%2FLibrary%2FEdkUnixPeiPeCoffGetEntryPointLib%2FPeCoffGetEntryPoint.c;h=c0d0a01d3ef532a893a6b67fbe6e2d634b485afb;hp=0000000000000000000000000000000000000000;hb=c9093a06e72ef16d2f3bd7ce0a2b9a172e9d048c;hpb=8ba7afaf2e9c682a5d17760e6dd5463b3a2b2d67 diff --git a/EdkUnixPkg/Library/EdkUnixPeiPeCoffGetEntryPointLib/PeCoffGetEntryPoint.c b/EdkUnixPkg/Library/EdkUnixPeiPeCoffGetEntryPointLib/PeCoffGetEntryPoint.c new file mode 100644 index 0000000000..c0d0a01d3e --- /dev/null +++ b/EdkUnixPkg/Library/EdkUnixPeiPeCoffGetEntryPointLib/PeCoffGetEntryPoint.c @@ -0,0 +1,75 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + PeCoffGetEntryPoint.c + +Abstract: + + Tiano PE/COFF loader + +Revision History + +--*/ + + +RETURN_STATUS +EFIAPI +PeCoffLoaderGetEntryPoint ( + IN VOID *Pe32Data, + IN OUT VOID **EntryPoint + ) +/*++ + +Routine Description: + + Loads a PE/COFF image into memory + +Arguments: + + Pe32Data - Pointer to a PE/COFF Image + + EntryPoint - Pointer to the entry point of the PE/COFF image + +Returns: + + EFI_SUCCESS if the EntryPoint was returned + EFI_INVALID_PARAMETER if the EntryPoint could not be found from Pe32Data + +--*/ +{ + EFI_STATUS Status; + EFI_PEI_PPI_DESCRIPTOR *PpiDescriptor; + UNIX_PEI_LOAD_FILE_PPI *PeiUnixService; + EFI_PHYSICAL_ADDRESS ImageAddress; + UINT64 ImageSize; + EFI_PHYSICAL_ADDRESS ImageEntryPoint; + + Status = PeiServicesLocatePpi ( + &gUnixPeiLoadFilePpiGuid, + 0, + &PpiDescriptor, + (void **)&PeiUnixService + ); + if (EFI_ERROR (Status)) { + return Status; + } + + Status = PeiUnixService->PeiLoadFileService ( + Pe32Data, + &ImageAddress, + &ImageSize, + &ImageEntryPoint + ); + *EntryPoint = (VOID*)(UINTN)ImageEntryPoint; + return Status; +}