REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiPayloadPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   ELF library
 | |
| 
 | |
|   Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef ELF_LIB_H_
 | |
| #define ELF_LIB_H_
 | |
| 
 | |
| #include <PiPei.h>
 | |
| 
 | |
| #define  ELF_CLASS32  1
 | |
| #define  ELF_CLASS64  2
 | |
| 
 | |
| #define  ELF_PT_LOAD  1
 | |
| 
 | |
| typedef struct {
 | |
|   RETURN_STATUS    ParseStatus;            ///< Return the status after ParseElfImage().
 | |
|   UINT8            *FileBase;              ///< The source location in memory.
 | |
|   UINTN            FileSize;               ///< The size including sections that don't require loading.
 | |
|   UINT8            *PreferredImageAddress; ///< The preferred image to be loaded. No relocation is needed if loaded to this address.
 | |
|   BOOLEAN          ReloadRequired;         ///< The image needs a new memory location for running.
 | |
|   UINT8            *ImageAddress;          ///< The destination memory address set by caller.
 | |
|   UINTN            ImageSize;              ///< The memory size for loading and execution.
 | |
|   UINT32           EiClass;
 | |
|   UINT32           ShNum;
 | |
|   UINT32           PhNum;
 | |
|   UINTN            ShStrOff;
 | |
|   UINTN            ShStrLen;
 | |
|   UINTN            EntryPoint;           ///< Return the actual entry point after LoadElfImage().
 | |
| } ELF_IMAGE_CONTEXT;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT32    PtType;
 | |
|   UINTN     Offset;
 | |
|   UINTN     Length;
 | |
|   UINTN     MemLen;
 | |
|   UINTN     MemAddr;
 | |
|   UINTN     Alignment;
 | |
| } SEGMENT_INFO;
 | |
| 
 | |
| /**
 | |
|   Parse the ELF image info.
 | |
| 
 | |
|   @param[in]  ImageBase      Memory address of an image.
 | |
|   @param[out] ElfCt          The EFL image context pointer.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER   Input parameters are not valid.
 | |
|   @retval EFI_UNSUPPORTED         Unsupported binary type.
 | |
|   @retval EFI_LOAD_ERROR          ELF binary loading error.
 | |
|   @retval EFI_SUCCESS             ELF binary is loaded successfully.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| ParseElfImage (
 | |
|   IN  VOID               *ImageBase,
 | |
|   OUT ELF_IMAGE_CONTEXT  *ElfCt
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Load the ELF segments to specified address in ELF header.
 | |
| 
 | |
|   This function loads ELF image segments into memory address specified
 | |
|   in ELF program header.
 | |
| 
 | |
|   @param[in]  ElfCt               ELF image context pointer.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER   Input parameters are not valid.
 | |
|   @retval EFI_UNSUPPORTED         Unsupported binary type.
 | |
|   @retval EFI_LOAD_ERROR          ELF binary loading error.
 | |
|   @retval EFI_SUCCESS             ELF binary is loaded successfully.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| LoadElfImage (
 | |
|   IN  ELF_IMAGE_CONTEXT  *ElfCt
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get a ELF section name from its index.
 | |
| 
 | |
|   @param[in]  ElfCt               ELF image context pointer.
 | |
|   @param[in]  SectionIndex        ELF section index.
 | |
|   @param[out] SectionName         The pointer to the section name.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER   ElfCt or SecName is NULL.
 | |
|   @retval EFI_NOT_FOUND           Could not find the section.
 | |
|   @retval EFI_SUCCESS             Section name was filled successfully.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| GetElfSectionName (
 | |
|   IN  ELF_IMAGE_CONTEXT  *ElfCt,
 | |
|   IN  UINT32             SectionIndex,
 | |
|   OUT CHAR8              **SectionName
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Get the offset and size of x-th ELF section.
 | |
| 
 | |
|   @param[in]  ElfCt               ELF image context pointer.
 | |
|   @param[in]  Index               ELF section index.
 | |
|   @param[out] Offset              Return the offset of the specific section.
 | |
|   @param[out] Size                Return the size of the specific section.
 | |
| 
 | |
|   @retval EFI_INVALID_PARAMETER   ImageBase, Offset or Size is NULL.
 | |
|   @retval EFI_INVALID_PARAMETER   EiClass doesn't equal to ELFCLASS32 or ELFCLASS64.
 | |
|   @retval EFI_NOT_FOUND           Could not find the section.
 | |
|   @retval EFI_SUCCESS             Offset and Size are returned.
 | |
| **/
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| GetElfSectionPos (
 | |
|   IN  ELF_IMAGE_CONTEXT  *ElfCt,
 | |
|   IN  UINT32             Index,
 | |
|   OUT UINTN              *Offset,
 | |
|   OUT UINTN              *Size
 | |
|   );
 | |
| 
 | |
| #endif /* ELF_LIB_H_ */
 |