/** @file Function prototypes and defines on Memory Only PE COFF loader Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
Portion Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __BASE_PE_COFF_LIB_H__ #define __BASE_PE_COFF_LIB_H__ // // Return status codes from the PE/COFF Loader services // BUGBUG: Find where used and see if can be replaced by RETURN_STATUS codes // #define IMAGE_ERROR_SUCCESS 0 #define IMAGE_ERROR_IMAGE_READ 1 #define IMAGE_ERROR_INVALID_PE_HEADER_SIGNATURE 2 #define IMAGE_ERROR_INVALID_MACHINE_TYPE 3 #define IMAGE_ERROR_INVALID_SUBSYSTEM 4 #define IMAGE_ERROR_INVALID_IMAGE_ADDRESS 5 #define IMAGE_ERROR_INVALID_IMAGE_SIZE 6 #define IMAGE_ERROR_INVALID_SECTION_ALIGNMENT 7 #define IMAGE_ERROR_SECTION_NOT_LOADED 8 #define IMAGE_ERROR_FAILED_RELOCATION 9 #define IMAGE_ERROR_FAILED_ICACHE_FLUSH 10 // // Macro definitions for RISC-V architecture. // #define RV_X(x, s, n) (((x) >> (s)) & ((1<<(n))-1)) #define RISCV_IMM_BITS 12 #define RISCV_IMM_REACH (1LL<ImageRead() function **/ RETURN_STATUS EFIAPI PeCoffLoaderGetImageInfo ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) ; /** Relocates a PE/COFF image in memory @param ImageContext Contains information on the loaded image to relocate @retval EFI_SUCCESS if the PE/COFF image was relocated @retval EFI_LOAD_ERROR if the image is not a valid PE/COFF image @retval EFI_UNSUPPORTED not support **/ RETURN_STATUS EFIAPI PeCoffLoaderRelocateImage ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) ; /** Loads a PE/COFF image into memory @param ImageContext Contains information on image to load into memory @retval EFI_SUCCESS if the PE/COFF image was loaded @retval EFI_BUFFER_TOO_SMALL if the caller did not provide a large enough buffer @retval EFI_LOAD_ERROR if the image is a runtime driver with no relocations @retval EFI_INVALID_PARAMETER if the image address is invalid **/ RETURN_STATUS EFIAPI PeCoffLoaderLoadImage ( IN OUT PE_COFF_LOADER_IMAGE_CONTEXT *ImageContext ) ; VOID * EFIAPI PeCoffLoaderGetPdbPointer ( IN VOID *Pe32Data ) ; RETURN_STATUS EFIAPI PeCoffLoaderGetEntryPoint ( IN VOID *Pe32Data, OUT VOID **EntryPoint, OUT VOID **BaseOfImage ) ; // // These functions are used by the ARM PE/COFF relocation code and by // the ELF to PE/COFF converter so that is why they are public // /** Pass in a pointer to an ARM MOVT or MOVW immediate instruction and return the immediate data encoded in the instruction @param Instruction Pointer to ARM MOVT or MOVW immediate instruction @return Immediate address encoded in the instruction **/ UINT16 EFIAPI ThumbMovtImmediateAddress ( IN UINT16 *Instruction ); /** Update an ARM MOVT or MOVW immediate instruction immediate data. @param Instruction Pointer to ARM MOVT or MOVW immediate instruction @param Address New address to patch into the instruction **/ VOID EFIAPI ThumbMovtImmediatePatch ( IN OUT UINT16 *Instruction, IN UINT16 Address ); /** Pass in a pointer to an ARM MOVW/MOVT instruction pair and return the immediate data encoded in the two` instruction @param Instructions Pointer to ARM MOVW/MOVT instruction pair @return Immediate address encoded in the instructions **/ UINT32 EFIAPI ThumbMovwMovtImmediateAddress ( IN UINT16 *Instructions ); /** Update an ARM MOVW/MOVT immediate instruction instruction pair. @param Instructions Pointer to ARM MOVW/MOVT instruction pair @param Address New address to patch into the instructions **/ VOID EFIAPI ThumbMovwMovtImmediatePatch ( IN OUT UINT16 *Instructions, IN UINT32 Address ); #endif