From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001
From: Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com>
Date: Tue, 10 Oct 2023 14:33:42 +0000
Subject: Add submodule dependency files

Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
---
 roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h | 213 ++++++++++++++++++++++++
 1 file changed, 213 insertions(+)
 create mode 100644 roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h

(limited to 'roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h')

diff --git a/roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h b/roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h
new file mode 100644
index 000000000..dd38f442f
--- /dev/null
+++ b/roms/edk2/BaseTools/Source/C/Common/PeCoffLib.h
@@ -0,0 +1,213 @@
+/** @file
+  Function prototypes and defines on Memory Only PE COFF loader
+
+  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+  Portion Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
+  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<<RISCV_IMM_BITS)
+#define RISCV_CONST_HIGH_PART(VALUE) \
+  (((VALUE) + (RISCV_IMM_REACH/2)) & ~(RISCV_IMM_REACH-1))
+
+//
+// PE/COFF Loader Read Function passed in by caller
+//
+typedef
+RETURN_STATUS
+(EFIAPI *PE_COFF_LOADER_READ_FILE) (
+  IN     VOID   *FileHandle,
+  IN     UINTN  FileOffset,
+  IN OUT UINTN  *ReadSize,
+  OUT    VOID   *Buffer
+  );
+
+//
+// Context structure used while PE/COFF image is being loaded and relocated
+//
+typedef struct {
+  PHYSICAL_ADDRESS                  ImageAddress;
+  UINT64                            ImageSize;
+  PHYSICAL_ADDRESS                  DestinationAddress;
+  PHYSICAL_ADDRESS                  EntryPoint;
+  PE_COFF_LOADER_READ_FILE          ImageRead;
+  VOID                              *Handle;
+  VOID                              *FixupData;
+  UINT32                            SectionAlignment;
+  UINT32                            PeCoffHeaderOffset;
+  UINT32                            DebugDirectoryEntryRva;
+  VOID                              *CodeView;
+  CHAR8                             *PdbPointer;
+  UINTN                             SizeOfHeaders;
+  UINT32                            ImageCodeMemoryType;
+  UINT32                            ImageDataMemoryType;
+  UINT32                            ImageError;
+  UINTN                             FixupDataSize;
+  UINT16                            Machine;
+  UINT16                            ImageType;
+  BOOLEAN                           RelocationsStripped;
+  BOOLEAN                           IsTeImage;
+} PE_COFF_LOADER_IMAGE_CONTEXT;
+
+
+/**
+  Retrieves information on a PE/COFF image
+
+  @param  ImageContext The context of the image being loaded
+
+  @retval  EFI_SUCCESS The information on the PE/COFF image was collected.
+  @retval  EFI_INVALID_PARAMETER ImageContext is NULL.
+  @retval  EFI_UNSUPPORTED The PE/COFF image is not supported.
+  @retval  Otherwise The error status from reading the PE/COFF image using the
+  ImageContext->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
-- 
cgit