]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPkg: Remove BasePeCoffLib
authorHarry Liebel <Harry.Liebel@arm.com>
Tue, 29 Jul 2014 14:13:21 +0000 (14:13 +0000)
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 29 Jul 2014 14:13:21 +0000 (14:13 +0000)
ArmPkg contains unused and outdated code for runtime PE/COFF image
relocation.

- Use the version in MdePkg instead.
- Remove references to this package from BeagleBoardPkg.

ArmPkg/BasePeCoffLib was added to deal with MOVT instruction that
was not part of the PE/COFF specification at that time.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Harry Liebel <Harry.Liebel@arm.com>
Reviewed-By: Olivier Martin <olivier.martin@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15712 6f19259b-4bc3-4df7-8a09-765794883524

ArmPkg/ArmPkg.dsc
ArmPkg/Library/BasePeCoffLib/AArch64/PeCoffLoaderEx.c [deleted file]
ArmPkg/Library/BasePeCoffLib/Arm/PeCoffLoaderEx.c [deleted file]
ArmPkg/Library/BasePeCoffLib/BasePeCoff.c [deleted file]
ArmPkg/Library/BasePeCoffLib/BasePeCoffLib.inf [deleted file]
ArmPkg/Library/BasePeCoffLib/BasePeCoffLibInternals.h [deleted file]
ArmPkg/Library/BasePeCoffLib/Ipf/PeCoffLoaderEx.c [deleted file]
ArmPkg/Library/BasePeCoffLib/PeCoffLoaderEx.c [deleted file]
BeagleBoardPkg/BeagleBoardPkg.dsc

index 661453c29598625a39bf0abe23e3da11566979bd..2dbcb86e2c582bc376301f05fec0cb7835c63473 100644 (file)
@@ -54,6 +54,7 @@
   UefiLib|MdePkg/Library/UefiLib/UefiLib.inf\r
   DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf\r
   UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf\r
+  PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
   PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf\r
 \r
   SemihostLib|ArmPkg/Library/SemihostLib/SemihostLib.inf\r
   ArmPkg/Library/ArmDmaLib/ArmDmaLib.inf\r
   ArmPkg/Library/ArmLib/Null/NullArmLib.inf\r
   ArmPkg/Library/BaseMemoryLibStm/BaseMemoryLibStm.inf\r
-  ArmPkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
   ArmPkg/Library/BdsLib/BdsLib.inf\r
   ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf\r
   ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf\r
diff --git a/ArmPkg/Library/BasePeCoffLib/AArch64/PeCoffLoaderEx.c b/ArmPkg/Library/BasePeCoffLib/AArch64/PeCoffLoaderEx.c
deleted file mode 100644 (file)
index 3fea462..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/** @file\r
-  Specific relocation fixups for ARM architecture.\r
-\r
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
-  Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
-  Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
-\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BasePeCoffLibInternals.h"\r
-#include <Library/BaseLib.h>\r
-\r
-//\r
-// Note: Currently only large memory model is supported by UEFI relocation code.\r
-//\r
-\r
-/**\r
-  Performs an AARCH64-based specific relocation fixup and is a no-op on other\r
-  instruction sets.\r
-\r
-  @param  Reloc       The pointer to the relocation record.\r
-  @param  Fixup       The pointer to the address to fix up.\r
-  @param  FixupData   The pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT64      *F64;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-\r
-    case EFI_IMAGE_REL_BASED_DIR64:\r
-      F64 = (UINT64 *) Fixup;\r
-      *F64 = *F64 + (UINT64) Adjust;\r
-      if (*FixupData != NULL) {\r
-        *FixupData = ALIGN_POINTER(*FixupData, sizeof(UINT64));\r
-        *(UINT64 *)(*FixupData) = *F64;\r
-        *FixupData = *FixupData + sizeof(UINT64);\r
-      }\r
-      break;\r
-\r
-    default:\r
-      return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-/**\r
-  Returns TRUE if the machine type of PE/COFF image is supported. Supported\r
-  does not mean the image can be executed it means the PE/COFF loader supports\r
-  loading and relocating of the image type. It's up to the caller to support\r
-  the entry point.\r
-\r
-  @param  Machine   Machine type from the PE Header.\r
-\r
-  @return TRUE if this PE/COFF loader can load the image\r
-\r
-**/\r
-BOOLEAN\r
-PeCoffLoaderImageFormatSupported (\r
-  IN  UINT16  Machine\r
-  )\r
-{\r
-  if ((Machine == IMAGE_FILE_MACHINE_ARM64) || (Machine ==  IMAGE_FILE_MACHINE_EBC)) {\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-/**\r
-  Performs an ARM-based specific re-relocation fixup and is a no-op on other\r
-  instruction sets. This is used to re-relocated the image into the EFI virtual\r
-  space for runtime calls.\r
-\r
-  @param  Reloc       The pointer to the relocation record.\r
-  @param  Fixup       The pointer to the address to fix up.\r
-  @param  FixupData   The pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeHotRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT64  *Fixup64;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-  case EFI_IMAGE_REL_BASED_DIR64:\r
-    Fixup64     = (UINT64 *) Fixup;\r
-    *FixupData  = ALIGN_POINTER (*FixupData, sizeof (UINT64));\r
-    if (*(UINT64 *) (*FixupData) == *Fixup64) {\r
-      *Fixup64 = *Fixup64 + (UINT64) Adjust;\r
-    }\r
-\r
-    *FixupData = *FixupData + sizeof (UINT64);\r
-    break;\r
-\r
-  default:\r
-    DEBUG ((EFI_D_ERROR, "PeHotRelocateEx:unknown fixed type\n"));\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
diff --git a/ArmPkg/Library/BasePeCoffLib/Arm/PeCoffLoaderEx.c b/ArmPkg/Library/BasePeCoffLib/Arm/PeCoffLoaderEx.c
deleted file mode 100755 (executable)
index 4cd3380..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/** @file\r
-  Specific relocation fixups for ARM architecture.\r
-\r
-  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>\r
-  Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BasePeCoffLibInternals.h"\r
-\r
-\r
-//\r
-// The PE/COFF specification needs to get update for ARMv7 MOVW/MOVT\r
-// When it gets updated we can move these defines to PeImage.h\r
-//\r
-#define EFI_IMAGE_REL_BASED_ARM_THUMB_MOVW  11\r
-#define EFI_IMAGE_REL_BASED_ARM_THUMB_MOVT  12\r
-\r
-\r
-/**\r
-  Pass in a pointer to an ARM MOVT or MOVW immediate instruciton and \r
-  return the immediate data encoded in the instruction\r
-\r
-  @param  Instruction   Pointer to ARM MOVT or MOVW immediate instruction\r
-\r
-  @return Immediate address encoded in the instruction\r
-\r
-**/\r
-UINT16\r
-ThumbMovtImmediateAddress (\r
-  IN UINT16 *Instruction\r
-  )\r
-{\r
-  UINT32  Movt;\r
-  UINT16  Address;\r
-  \r
-  // Thumb2 is two 16-bit instructions working together. Not a single 32-bit instruction\r
-  // Example MOVT R0, #0 is 0x0000f2c0 or 0xf2c0 0x0000\r
-  Movt = (*Instruction << 16) | (*(Instruction + 1)); \r
-\r
-  // imm16 = imm4:i:imm3:imm8\r
-  //         imm4 -> Bit19:Bit16\r
-  //         i    -> Bit26\r
-  //         imm3 -> Bit14:Bit12\r
-  //         imm8 -> Bit7:Bit0\r
-  Address  = (UINT16)(Movt & 0x000000ff);         // imm8\r
-  Address |= (UINT16)((Movt >> 4) &  0x0000f700); // imm4 imm3\r
-  Address |= (Movt & BIT26 ? BIT11 : 0);          // i\r
-  return Address;\r
-}\r
-\r
-\r
-/**\r
-  Update an ARM MOVT or MOVW immediate instruction immediate data.\r
-\r
-  @param  Instruction   Pointer to ARM MOVT or MOVW immediate instruction\r
-  @param  Address       New addres to patch into the instruction\r
-**/\r
-VOID\r
-ThumbMovtImmediatePatch (\r
-  IN OUT UINT16 *Instruction,\r
-  IN     UINT16 Address\r
-  )\r
-{\r
-  UINT16  Patch;\r
-\r
-  // First 16-bit chunk of instruciton\r
-  Patch  = ((Address >> 12) & 0x000f);            // imm4 \r
-  Patch |= (((Address & BIT11) != 0) ? BIT10 : 0); // i\r
-  // Mask out instruction bits and or in address\r
-  *(Instruction) = (*Instruction & ~0x040f) | Patch;\r
-\r
-  // Second 16-bit chunk of instruction\r
-  Patch  =  Address & 0x000000ff;          // imm8\r
-  Patch |=  ((Address << 4) & 0x00007000); // imm3\r
-  // Mask out instruction bits and or in address\r
-  Instruction++;\r
-  *Instruction = (*Instruction & ~0x70ff) | Patch;\r
-}\r
-\r
-\r
-/**\r
-  Performs an ARM-based specific relocation fixup and is a no-op on other\r
-  instruction sets.\r
-\r
-  @param  Reloc       Pointer to Pointer to the relocation record.\r
-  @param  Fixup       Pointer to the address to fix up.\r
-  @param  FixupData   Pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT16      *Fixup16;\r
-  UINT16      FixupVal;\r
-  UINT16      *Addend;\r
-\r
-  Fixup16   = (UINT16 *) Fixup;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-  case EFI_IMAGE_REL_BASED_ARM_THUMB_MOVW:\r
-    FixupVal = ThumbMovtImmediateAddress (Fixup16) + (UINT16)Adjust;\r
-    ThumbMovtImmediatePatch (Fixup16, FixupVal);\r
-\r
-    if (*FixupData != NULL) {\r
-      *FixupData             = ALIGN_POINTER (*FixupData, sizeof (UINT16));\r
-      *(UINT16 *)*FixupData  = *Fixup16;\r
-      *FixupData             = *FixupData + sizeof (UINT16);\r
-    }\r
-    break;\r
-\r
-  case EFI_IMAGE_REL_BASED_ARM_THUMB_MOVT:\r
-    // For MOVT you need to know the lower 16-bits do do the math\r
-    // So this relocation entry is really two entries.\r
-    *Reloc = *Reloc + 1;\r
-    Addend = *Reloc; \r
-    FixupVal = (UINT16)(((ThumbMovtImmediateAddress (Fixup16) << 16) + Adjust + *Addend) >> 16);\r
-    ThumbMovtImmediatePatch (Fixup16, FixupVal);\r
-\r
-    if (*FixupData != NULL) {\r
-      *FixupData             = ALIGN_POINTER (*FixupData, sizeof (UINT16));\r
-      *(UINT16 *)*FixupData  = *Fixup16;\r
-      *FixupData             = *FixupData + sizeof (UINT16);\r
-    }\r
-    break;\r
-  \r
-  default:\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-/**\r
-  Returns TRUE if the machine type of PE/COFF image is supported. Supported\r
-  does not mean the image can be executed it means the PE/COFF loader supports\r
-  loading and relocating of the image type. It's up to the caller to support\r
-  the entry point.\r
-  \r
-  The IA32/X64 version PE/COFF loader/relocater both support IA32, X64 and EBC images.\r
-\r
-  @param  Machine   Machine type from the PE Header.\r
-\r
-  @return TRUE if this PE/COFF loader can load the image\r
-\r
-**/\r
-BOOLEAN\r
-PeCoffLoaderImageFormatSupported (\r
-  IN  UINT16  Machine\r
-  )\r
-{\r
-  if ((Machine == IMAGE_FILE_MACHINE_ARMTHUMB_MIXED) || (Machine ==  IMAGE_FILE_MACHINE_EBC)) {\r
-    return TRUE; \r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-/**\r
-  Performs an ARM-based specific re-relocation fixup and is a no-op on other\r
-  instruction sets. This is used to re-relocated the image into the EFI virtual\r
-  space for runtime calls.\r
-\r
-  @param  Reloc       The pointer to the relocation record.\r
-  @param  Fixup       The pointer to the address to fix up.\r
-  @param  FixupData   The pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeHotRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT16  *Fixup16;\r
-  UINT16  FixupVal;\r
-  UINT16  *Addend;\r
-\r
-  Fixup16 = (UINT16 *)Fixup;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-  case EFI_IMAGE_REL_BASED_ARM_THUMB_MOVW:\r
-    *FixupData  = ALIGN_POINTER (*FixupData, sizeof (UINT16));\r
-    if (*(UINT16 *) (*FixupData) == *Fixup16) {\r
-      FixupVal = ThumbMovtImmediateAddress (Fixup16) + (UINT16)Adjust;\r
-      ThumbMovtImmediatePatch (Fixup16, FixupVal);\r
-    }\r
-    break;\r
-\r
-  case EFI_IMAGE_REL_BASED_ARM_THUMB_MOVT:\r
-    *FixupData  = ALIGN_POINTER (*FixupData, sizeof (UINT16));\r
-    if (*(UINT16 *) (*FixupData) == *Fixup16) {\r
-      // For MOVT you need to know the lower 16-bits do do the math\r
-      // So this relocation entry is really two entries.\r
-      *Reloc = *Reloc + 1;\r
-      Addend = *Reloc; \r
-      FixupVal = (UINT16)(((ThumbMovtImmediateAddress (Fixup16) << 16) + Adjust + *Addend) >> 16);\r
-      ThumbMovtImmediatePatch (Fixup16, FixupVal);\r
-    }\r
-    break;\r
-\r
-  default:\r
-    DEBUG ((EFI_D_ERROR, "PeHotRelocateEx:unknown fixed type\n"));\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
diff --git a/ArmPkg/Library/BasePeCoffLib/BasePeCoff.c b/ArmPkg/Library/BasePeCoffLib/BasePeCoff.c
deleted file mode 100755 (executable)
index 8e0ceb8..0000000
+++ /dev/null
@@ -1,1528 +0,0 @@
-/** @file\r
-  Base PE/COFF loader supports loading any PE32/PE32+ or TE image, but\r
-  only supports relocating IA32, x64, IPF, and EBC images.\r
-\r
-  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
-  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BasePeCoffLibInternals.h"\r
-\r
-/**\r
-  Retrieves the magic value from the PE/COFF header.\r
-\r
-  @param  Hdr             The buffer in which to return the PE32, PE32+, or TE header.\r
-\r
-  @return EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC - Image is PE32\r
-  @return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC - Image is PE32+\r
-\r
-**/\r
-UINT16\r
-PeCoffLoaderGetPeHeaderMagicValue (\r
-  IN  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION  Hdr\r
-  )\r
-{\r
-  //\r
-  // NOTE: Some versions of Linux ELILO for Itanium have an incorrect magic value \r
-  //       in the PE/COFF Header.  If the MachineType is Itanium(IA64) and the \r
-  //       Magic value in the OptionalHeader is  EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC\r
-  //       then override the returned value to EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC\r
-  //\r
-  if (Hdr.Pe32->FileHeader.Machine == IMAGE_FILE_MACHINE_IA64 && Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-    return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;\r
-  }\r
-  //\r
-  // Return the magic value from the PC/COFF Optional Header\r
-  //\r
-  return Hdr.Pe32->OptionalHeader.Magic;\r
-}\r
-\r
-\r
-/**\r
-  Retrieves the PE or TE Header from a PE/COFF or TE image.\r
-\r
-  @param  ImageContext    The context of the image being loaded.\r
-  @param  Hdr             The buffer in which to return the PE32, PE32+, or TE header.\r
-\r
-  @retval RETURN_SUCCESS  The PE or TE Header is read.\r
-  @retval Other           The error status from reading the PE/COFF or TE image using the ImageRead function.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderGetPeHeader (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT         *ImageContext,\r
-  OUT    EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION  Hdr\r
-  )\r
-{\r
-  RETURN_STATUS         Status;\r
-  EFI_IMAGE_DOS_HEADER  DosHdr;\r
-  UINTN                 Size;\r
-  UINT16                Magic;\r
-\r
-  //\r
-  // Read the DOS image header to check for its existence\r
-  //\r
-  Size = sizeof (EFI_IMAGE_DOS_HEADER);\r
-  Status = ImageContext->ImageRead (\r
-                           ImageContext->Handle,\r
-                           0,\r
-                           &Size,\r
-                           &DosHdr\r
-                           );\r
-  if (RETURN_ERROR (Status)) {\r
-    ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-    return Status;\r
-  }\r
-\r
-  ImageContext->PeCoffHeaderOffset = 0;\r
-  if (DosHdr.e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
-    //\r
-    // DOS image header is present, so read the PE header after the DOS image\r
-    // header\r
-    //\r
-    ImageContext->PeCoffHeaderOffset = DosHdr.e_lfanew;\r
-  }\r
-\r
-  //\r
-  // Read the PE/COFF Header. For PE32 (32-bit) this will read in too much\r
-  // data, but that should not hurt anything. Hdr.Pe32->OptionalHeader.Magic\r
-  // determines if this is a PE32 or PE32+ image. The magic is in the same\r
-  // location in both images.\r
-  //\r
-  Size = sizeof (EFI_IMAGE_OPTIONAL_HEADER_UNION);\r
-  Status = ImageContext->ImageRead (\r
-                           ImageContext->Handle,\r
-                           ImageContext->PeCoffHeaderOffset,\r
-                           &Size,\r
-                           Hdr.Pe32\r
-                           );\r
-  if (RETURN_ERROR (Status)) {\r
-    ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Use Signature to figure out if we understand the image format\r
-  //\r
-  if (Hdr.Te->Signature == EFI_TE_IMAGE_HEADER_SIGNATURE) {\r
-    ImageContext->IsTeImage         = TRUE;\r
-    ImageContext->Machine           = Hdr.Te->Machine;\r
-    ImageContext->ImageType         = (UINT16)(Hdr.Te->Subsystem);\r
-    //\r
-    // For TeImage, SectionAlignment is undefined to be set to Zero\r
-    // ImageSize can be calculated.\r
-    //\r
-    ImageContext->ImageSize         = 0;\r
-    ImageContext->SectionAlignment  = 0;\r
-    ImageContext->SizeOfHeaders     = sizeof (EFI_TE_IMAGE_HEADER) + (UINTN)Hdr.Te->BaseOfCode - (UINTN)Hdr.Te->StrippedSize;\r
-\r
-  } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE)  {\r
-    ImageContext->IsTeImage = FALSE;\r
-    ImageContext->Machine = Hdr.Pe32->FileHeader.Machine;\r
-\r
-    Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr);\r
-\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      ImageContext->ImageType         = Hdr.Pe32->OptionalHeader.Subsystem;\r
-      ImageContext->ImageSize         = (UINT64)Hdr.Pe32->OptionalHeader.SizeOfImage;\r
-      ImageContext->SectionAlignment  = Hdr.Pe32->OptionalHeader.SectionAlignment;\r
-      ImageContext->SizeOfHeaders     = Hdr.Pe32->OptionalHeader.SizeOfHeaders;\r
-\r
-    } else if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      ImageContext->ImageType         = Hdr.Pe32Plus->OptionalHeader.Subsystem;\r
-      ImageContext->ImageSize         = (UINT64) Hdr.Pe32Plus->OptionalHeader.SizeOfImage;\r
-      ImageContext->SectionAlignment  = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;\r
-      ImageContext->SizeOfHeaders     = Hdr.Pe32Plus->OptionalHeader.SizeOfHeaders;\r
-    } else {\r
-      ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;\r
-      return RETURN_UNSUPPORTED;\r
-    }\r
-  } else {\r
-    ImageContext->ImageError = IMAGE_ERROR_INVALID_MACHINE_TYPE;\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  if (!PeCoffLoaderImageFormatSupported (ImageContext->Machine)) {\r
-    //\r
-    // If the PE/COFF loader does not support the image type return\r
-    // unsupported. This library can support lots of types of images\r
-    // this does not mean the user of this library can call the entry\r
-    // point of the image.\r
-    //\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
-  Retrieves information about a PE/COFF image.\r
-\r
-  Computes the PeCoffHeaderOffset, IsTeImage, ImageType, ImageAddress, ImageSize, \r
-  DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, and \r
-  DebugDirectoryEntryRva fields of the ImageContext structure.  \r
-  If ImageContext is NULL, then return RETURN_INVALID_PARAMETER.  \r
-  If the PE/COFF image accessed through the ImageRead service in the ImageContext \r
-  structure is not a supported PE/COFF image type, then return RETURN_UNSUPPORTED.  \r
-  If any errors occur while computing the fields of ImageContext, \r
-  then the error status is returned in the ImageError field of ImageContext.  \r
-  If the image is a TE image, then SectionAlignment is set to 0.\r
-  The ImageRead and Handle fields of ImageContext structure must be valid prior \r
-  to invoking this service.\r
-\r
-  @param  ImageContext              The pointer to the image context structure that describes the PE/COFF\r
-                                    image that needs to be examined by this function.\r
-\r
-  @retval RETURN_SUCCESS            The information on the PE/COFF image was collected.\r
-  @retval RETURN_INVALID_PARAMETER  ImageContext is NULL.\r
-  @retval RETURN_UNSUPPORTED        The PE/COFF image is not supported.\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-PeCoffLoaderGetImageInfo (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext\r
-  )\r
-{\r
-  RETURN_STATUS                         Status;\r
-  EFI_IMAGE_OPTIONAL_HEADER_UNION       HdrData;\r
-  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION   Hdr;\r
-  EFI_IMAGE_DATA_DIRECTORY              *DebugDirectoryEntry;\r
-  UINTN                                 Size;\r
-  UINTN                                 Index;\r
-  UINTN                                 DebugDirectoryEntryRva;\r
-  UINTN                                 DebugDirectoryEntryFileOffset;\r
-  UINTN                                 SectionHeaderOffset;\r
-  EFI_IMAGE_SECTION_HEADER              SectionHeader;\r
-  EFI_IMAGE_DEBUG_DIRECTORY_ENTRY       DebugEntry;\r
-  UINT32                                NumberOfRvaAndSizes;\r
-  UINT16                                Magic;\r
-\r
-  if (ImageContext == NULL) {\r
-    return RETURN_INVALID_PARAMETER;\r
-  }\r
-  //\r
-  // Assume success\r
-  //\r
-  ImageContext->ImageError  = IMAGE_ERROR_SUCCESS;\r
-\r
-  Hdr.Union = &HdrData;\r
-  Status = PeCoffLoaderGetPeHeader (ImageContext, Hdr);\r
-  if (RETURN_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr);\r
-\r
-  //\r
-  // Retrieve the base address of the image\r
-  //\r
-  if (!(ImageContext->IsTeImage)) {\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      ImageContext->ImageAddress = Hdr.Pe32->OptionalHeader.ImageBase;\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      ImageContext->ImageAddress = Hdr.Pe32Plus->OptionalHeader.ImageBase;\r
-    }\r
-  } else {\r
-    ImageContext->ImageAddress = (PHYSICAL_ADDRESS)(Hdr.Te->ImageBase + Hdr.Te->StrippedSize - sizeof (EFI_TE_IMAGE_HEADER));\r
-  }\r
-\r
-  //\r
-  // Initialize the alternate destination address to 0 indicating that it\r
-  // should not be used.\r
-  //\r
-  ImageContext->DestinationAddress = 0;\r
-\r
-  //\r
-  // Initialize the debug codeview pointer.\r
-  //\r
-  ImageContext->DebugDirectoryEntryRva = 0;\r
-  ImageContext->CodeView               = NULL;\r
-  ImageContext->PdbPointer             = NULL;\r
-\r
-  //\r
-  // Three cases with regards to relocations:\r
-  // - Image has base relocs, RELOCS_STRIPPED==0    => image is relocatable\r
-  // - Image has no base relocs, RELOCS_STRIPPED==1 => Image is not relocatable\r
-  // - Image has no base relocs, RELOCS_STRIPPED==0 => Image is relocatable but\r
-  //   has no base relocs to apply\r
-  // Obviously having base relocations with RELOCS_STRIPPED==1 is invalid.\r
-  //\r
-  // Look at the file header to determine if relocations have been stripped, and\r
-  // save this information in the image context for later use.\r
-  //\r
-  if ((!(ImageContext->IsTeImage)) && ((Hdr.Pe32->FileHeader.Characteristics & EFI_IMAGE_FILE_RELOCS_STRIPPED) != 0)) {\r
-    ImageContext->RelocationsStripped = TRUE;\r
-  } else if ((ImageContext->IsTeImage) && (Hdr.Te->DataDirectory[0].Size == 0) && (Hdr.Te->DataDirectory[0].VirtualAddress == 0)) {\r
-    ImageContext->RelocationsStripped = TRUE;\r
-  } else {\r
-    ImageContext->RelocationsStripped = FALSE;\r
-  }\r
-\r
-  if (!(ImageContext->IsTeImage)) {\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
-      DebugDirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
-      DebugDirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_DEBUG]);\r
-    }\r
-\r
-    if (NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_DEBUG) {\r
-\r
-      DebugDirectoryEntryRva = DebugDirectoryEntry->VirtualAddress;\r
-\r
-      //\r
-      // Determine the file offset of the debug directory...  This means we walk\r
-      // the sections to find which section contains the RVA of the debug\r
-      // directory\r
-      //\r
-      DebugDirectoryEntryFileOffset = 0;\r
-\r
-      SectionHeaderOffset = (UINTN)(\r
-                               ImageContext->PeCoffHeaderOffset +\r
-                               sizeof (UINT32) +\r
-                               sizeof (EFI_IMAGE_FILE_HEADER) +\r
-                               Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
-                               );\r
-\r
-      for (Index = 0; Index < Hdr.Pe32->FileHeader.NumberOfSections; Index++) {\r
-        //\r
-        // Read section header from file\r
-        //\r
-        Size = sizeof (EFI_IMAGE_SECTION_HEADER);\r
-        Status = ImageContext->ImageRead (\r
-                                 ImageContext->Handle,\r
-                                 SectionHeaderOffset,\r
-                                 &Size,\r
-                                 &SectionHeader\r
-                                 );\r
-        if (RETURN_ERROR (Status)) {\r
-          ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-          return Status;\r
-        }\r
-\r
-        if (DebugDirectoryEntryRva >= SectionHeader.VirtualAddress &&\r
-            DebugDirectoryEntryRva < SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize) {\r
-\r
-          DebugDirectoryEntryFileOffset = DebugDirectoryEntryRva - SectionHeader.VirtualAddress + SectionHeader.PointerToRawData;\r
-          break;\r
-        }\r
-\r
-        SectionHeaderOffset += sizeof (EFI_IMAGE_SECTION_HEADER);\r
-      }\r
-\r
-      if (DebugDirectoryEntryFileOffset != 0) {\r
-        for (Index = 0; Index < DebugDirectoryEntry->Size; Index += sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)) {\r
-          //\r
-          // Read next debug directory entry\r
-          //\r
-          Size = sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY);\r
-          Status = ImageContext->ImageRead (\r
-                                   ImageContext->Handle,\r
-                                   DebugDirectoryEntryFileOffset,\r
-                                   &Size,\r
-                                   &DebugEntry\r
-                                   );\r
-          if (RETURN_ERROR (Status)) {\r
-            ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-            return Status;\r
-          }\r
-          if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {\r
-            ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);\r
-            if (DebugEntry.RVA == 0 && DebugEntry.FileOffset != 0) {\r
-              ImageContext->ImageSize += DebugEntry.SizeOfData;\r
-            }\r
-\r
-            return RETURN_SUCCESS;\r
-          }\r
-        }\r
-      }\r
-    }\r
-  } else {\r
-\r
-    DebugDirectoryEntry             = &Hdr.Te->DataDirectory[1];\r
-    DebugDirectoryEntryRva          = DebugDirectoryEntry->VirtualAddress;\r
-    SectionHeaderOffset             = (UINTN)(sizeof (EFI_TE_IMAGE_HEADER));\r
-\r
-    DebugDirectoryEntryFileOffset   = 0;\r
-\r
-    for (Index = 0; Index < Hdr.Te->NumberOfSections;) {\r
-      //\r
-      // Read section header from file\r
-      //\r
-      Size   = sizeof (EFI_IMAGE_SECTION_HEADER);\r
-      Status = ImageContext->ImageRead (\r
-                               ImageContext->Handle,\r
-                               SectionHeaderOffset,\r
-                               &Size,\r
-                               &SectionHeader\r
-                               );\r
-      if (RETURN_ERROR (Status)) {\r
-        ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-        return Status;\r
-      }\r
-\r
-      if (DebugDirectoryEntryRva >= SectionHeader.VirtualAddress &&\r
-          DebugDirectoryEntryRva < SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize) {\r
-        DebugDirectoryEntryFileOffset = DebugDirectoryEntryRva -\r
-                                        SectionHeader.VirtualAddress +\r
-                                        SectionHeader.PointerToRawData +\r
-                                        sizeof (EFI_TE_IMAGE_HEADER) -\r
-                                        Hdr.Te->StrippedSize;\r
-\r
-        //\r
-        // File offset of the debug directory was found, if this is not the last\r
-        // section, then skip to the last section for calculating the image size.\r
-        //\r
-        if (Index < (UINTN) Hdr.Te->NumberOfSections - 1) {\r
-          SectionHeaderOffset += (Hdr.Te->NumberOfSections - 1 - Index) * sizeof (EFI_IMAGE_SECTION_HEADER);\r
-          Index = Hdr.Te->NumberOfSections - 1;\r
-          continue;\r
-        }\r
-      }\r
-\r
-      //\r
-      // In Te image header there is not a field to describe the ImageSize.\r
-      // Actually, the ImageSize equals the RVA plus the VirtualSize of\r
-      // the last section mapped into memory (Must be rounded up to\r
-      // a multiple of Section Alignment). Per the PE/COFF specification, the\r
-      // section headers in the Section Table must appear in order of the RVA\r
-      // values for the corresponding sections. So the ImageSize can be determined\r
-      // by the RVA and the VirtualSize of the last section header in the\r
-      // Section Table.  \r
-      //\r
-      if ((++Index) == (UINTN)Hdr.Te->NumberOfSections) {\r
-        ImageContext->ImageSize = (SectionHeader.VirtualAddress + SectionHeader.Misc.VirtualSize);\r
-      }\r
-\r
-      SectionHeaderOffset += sizeof (EFI_IMAGE_SECTION_HEADER);\r
-    }\r
-\r
-    if (DebugDirectoryEntryFileOffset != 0) {\r
-      for (Index = 0; Index < DebugDirectoryEntry->Size; Index += sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY)) {\r
-        //\r
-        // Read next debug directory entry\r
-        //\r
-        Size = sizeof (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY);\r
-        Status = ImageContext->ImageRead (\r
-                                 ImageContext->Handle,\r
-                                 DebugDirectoryEntryFileOffset,\r
-                                 &Size,\r
-                                 &DebugEntry\r
-                                 );\r
-        if (RETURN_ERROR (Status)) {\r
-          ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-          return Status;\r
-        }\r
-\r
-        if (DebugEntry.Type == EFI_IMAGE_DEBUG_TYPE_CODEVIEW) {\r
-          ImageContext->DebugDirectoryEntryRva = (UINT32) (DebugDirectoryEntryRva + Index);\r
-          return RETURN_SUCCESS;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-\r
-/**\r
-  Converts an image address to the loaded address.\r
-\r
-  @param  ImageContext  The context of the image being loaded.\r
-  @param  Address       The relative virtual address to be converted to the loaded address.\r
-\r
-  @return The converted address or NULL if the address can not be converted.\r
-\r
-**/\r
-VOID *\r
-PeCoffLoaderImageAddress (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT          *ImageContext,\r
-  IN     UINTN                                 Address\r
-  )\r
-{\r
-  //\r
-  // Make sure that Address and ImageSize is correct for the loaded image.\r
-  //\r
-  if (Address >= ImageContext->ImageSize) {\r
-    ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;\r
-    return NULL;\r
-  }\r
-\r
-  return (CHAR8 *)((UINTN) ImageContext->ImageAddress + Address);\r
-}\r
-\r
-/**\r
-  Applies relocation fixups to a PE/COFF image that was loaded with PeCoffLoaderLoadImage().\r
-\r
-  If the DestinationAddress field of ImageContext is 0, then use the ImageAddress field of\r
-  ImageContext as the relocation base address.  Otherwise, use the DestinationAddress field\r
-  of ImageContext as the relocation base address.  The caller must allocate the relocation\r
-  fixup log buffer and fill in the FixupData field of ImageContext prior to calling this function.\r
-  \r
-  The ImageRead, Handle, PeCoffHeaderOffset,  IsTeImage, Machine, ImageType, ImageAddress, \r
-  ImageSize, DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, \r
-  DebugDirectoryEntryRva, EntryPoint, FixupDataSize, CodeView, PdbPointer, and FixupData of \r
-  the ImageContext structure must be valid prior to invoking this service.\r
-    \r
-  If ImageContext is NULL, then ASSERT().\r
-\r
-  Note that if the platform does not maintain coherency between the instruction cache(s) and the data\r
-  cache(s) in hardware, then the caller is responsible for performing cache maintenance operations\r
-  prior to transferring control to a PE/COFF image that is loaded using this library.\r
-\r
-  @param  ImageContext        The pointer to the image context structure that describes the PE/COFF\r
-                              image that is being relocated.\r
-\r
-  @retval RETURN_SUCCESS      The PE/COFF image was relocated.\r
-                              Extended status information is in the ImageError field of ImageContext.\r
-  @retval RETURN_LOAD_ERROR   The image in not a valid PE/COFF image.\r
-                              Extended status information is in the ImageError field of ImageContext.\r
-  @retval RETURN_UNSUPPORTED  A relocation record type is not supported.\r
-                              Extended status information is in the ImageError field of ImageContext.\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-PeCoffLoaderRelocateImage (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext\r
-  )\r
-{\r
-  RETURN_STATUS                         Status;\r
-  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION   Hdr;\r
-  EFI_IMAGE_DATA_DIRECTORY              *RelocDir;\r
-  UINT64                                Adjust;\r
-  EFI_IMAGE_BASE_RELOCATION             *RelocBase;\r
-  EFI_IMAGE_BASE_RELOCATION             *RelocBaseEnd;\r
-  UINT16                                *Reloc;\r
-  UINT16                                *RelocEnd;\r
-  CHAR8                                 *Fixup;\r
-  CHAR8                                 *FixupBase;\r
-  UINT16                                *Fixup16;\r
-  UINT32                                *Fixup32;\r
-  UINT64                                *Fixup64;\r
-  CHAR8                                 *FixupData;\r
-  PHYSICAL_ADDRESS                      BaseAddress;\r
-  UINT32                                NumberOfRvaAndSizes;\r
-  UINT16                                Magic;\r
-\r
-  ASSERT (ImageContext != NULL);\r
-\r
-  //\r
-  // Assume success\r
-  //\r
-  ImageContext->ImageError = IMAGE_ERROR_SUCCESS;\r
-\r
-  //\r
-  // If there are no relocation entries, then we are done\r
-  //\r
-  if (ImageContext->RelocationsStripped) {\r
-    // Applies additional environment specific actions to relocate fixups \r
-    // to a PE/COFF image if needed\r
-    PeCoffLoaderRelocateImageExtraAction (ImageContext);  \r
-    return RETURN_SUCCESS;\r
-  }\r
-\r
-  //\r
-  // If the destination address is not 0, use that rather than the\r
-  // image address as the relocation target.\r
-  //\r
-  if (ImageContext->DestinationAddress != 0) {\r
-    BaseAddress = ImageContext->DestinationAddress;\r
-  } else {\r
-    BaseAddress = ImageContext->ImageAddress;\r
-  }\r
-\r
-  if (!(ImageContext->IsTeImage)) {\r
-    Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);\r
-\r
-    Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr);\r
-\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      Adjust = (UINT64)BaseAddress - Hdr.Pe32->OptionalHeader.ImageBase;\r
-      if (Adjust != 0) {\r
-        Hdr.Pe32->OptionalHeader.ImageBase = (UINT32)BaseAddress;\r
-      }\r
-\r
-      NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
-      RelocDir  = &Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC];\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      Adjust = (UINT64) BaseAddress - Hdr.Pe32Plus->OptionalHeader.ImageBase;\r
-      if (Adjust != 0) {\r
-        Hdr.Pe32Plus->OptionalHeader.ImageBase = (UINT64)BaseAddress;\r
-      }\r
-\r
-      NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
-      RelocDir  = &Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC];\r
-    }\r
-\r
-    //\r
-    // Find the relocation block\r
-    // Per the PE/COFF spec, you can't assume that a given data directory\r
-    // is present in the image. You have to check the NumberOfRvaAndSizes in\r
-    // the optional header to verify a desired directory entry is there.\r
-    //\r
-\r
-    if ((NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) && (RelocDir->Size > 0)) {\r
-      RelocBase = PeCoffLoaderImageAddress (ImageContext, RelocDir->VirtualAddress);\r
-      RelocBaseEnd = PeCoffLoaderImageAddress (\r
-                      ImageContext,\r
-                      RelocDir->VirtualAddress + RelocDir->Size - 1\r
-                      );\r
-      if (RelocBase == NULL || RelocBaseEnd == NULL) {\r
-        return RETURN_LOAD_ERROR;\r
-      }\r
-    } else {\r
-      //\r
-      // Set base and end to bypass processing below.\r
-      //\r
-      RelocBase = RelocBaseEnd = NULL;\r
-    }\r
-  } else {\r
-    Hdr.Te             = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);\r
-    Adjust             = (UINT64) (BaseAddress - Hdr.Te->StrippedSize + sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->ImageBase);\r
-    if (Adjust != 0) {\r
-      Hdr.Te->ImageBase  = (UINT64) (BaseAddress - Hdr.Te->StrippedSize + sizeof (EFI_TE_IMAGE_HEADER));\r
-    }\r
-\r
-    //\r
-    // Find the relocation block\r
-    //\r
-    RelocDir = &Hdr.Te->DataDirectory[0];\r
-    if (RelocDir->Size > 0) {\r
-      RelocBase = (EFI_IMAGE_BASE_RELOCATION *)(UINTN)(\r
-                                      ImageContext->ImageAddress +\r
-                                      RelocDir->VirtualAddress +\r
-                                      sizeof(EFI_TE_IMAGE_HEADER) -\r
-                                      Hdr.Te->StrippedSize\r
-                                      );\r
-      RelocBaseEnd = (EFI_IMAGE_BASE_RELOCATION *) ((UINTN) RelocBase + (UINTN) RelocDir->Size - 1);\r
-    } else {\r
-      //\r
-      // Set base and end to bypass processing below.\r
-      //\r
-      RelocBase = RelocBaseEnd = NULL;    \r
-    }\r
-  }\r
-\r
-  //\r
-  // If Adjust is not zero, then apply fix ups to the image\r
-  //\r
-  if (Adjust != 0) {\r
-    //\r
-    // Run the relocation information and apply the fixups\r
-    //\r
-    FixupData = ImageContext->FixupData;\r
-    while (RelocBase < RelocBaseEnd) {\r
-\r
-      Reloc     = (UINT16 *) ((CHAR8 *) RelocBase + sizeof (EFI_IMAGE_BASE_RELOCATION));\r
-      RelocEnd  = (UINT16 *) ((CHAR8 *) RelocBase + RelocBase->SizeOfBlock);\r
-      \r
-      //\r
-      // Make sure RelocEnd is in the Image range.\r
-      //\r
-      if ((CHAR8 *) RelocEnd < (CHAR8 *)((UINTN) ImageContext->ImageAddress) ||\r
-          (CHAR8 *) RelocEnd > (CHAR8 *)((UINTN)ImageContext->ImageAddress + (UINTN)ImageContext->ImageSize)) {\r
-        ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;\r
-        return RETURN_LOAD_ERROR;\r
-      }\r
-\r
-      if (!(ImageContext->IsTeImage)) {\r
-        FixupBase = PeCoffLoaderImageAddress (ImageContext, RelocBase->VirtualAddress);\r
-        if (FixupBase == NULL) {\r
-          return RETURN_LOAD_ERROR;\r
-        }\r
-      } else {\r
-        FixupBase = (CHAR8 *)(UINTN)(ImageContext->ImageAddress +\r
-                      RelocBase->VirtualAddress +\r
-                      sizeof(EFI_TE_IMAGE_HEADER) -\r
-                      Hdr.Te->StrippedSize\r
-                      );\r
-      }    \r
-\r
-      //\r
-      // Run this relocation record\r
-      //\r
-      while (Reloc < RelocEnd) {\r
-\r
-        Fixup = FixupBase + (*Reloc & 0xFFF);\r
-        switch ((*Reloc) >> 12) {\r
-        case EFI_IMAGE_REL_BASED_ABSOLUTE:\r
-          break;\r
-\r
-        case EFI_IMAGE_REL_BASED_HIGH:\r
-          Fixup16   = (UINT16 *) Fixup;\r
-          *Fixup16 = (UINT16) (*Fixup16 + ((UINT16) ((UINT32) Adjust >> 16)));\r
-          if (FixupData != NULL) {\r
-            *(UINT16 *) FixupData = *Fixup16;\r
-            FixupData             = FixupData + sizeof (UINT16);\r
-          }\r
-          break;\r
-\r
-        case EFI_IMAGE_REL_BASED_LOW:\r
-          Fixup16   = (UINT16 *) Fixup;\r
-          *Fixup16  = (UINT16) (*Fixup16 + (UINT16) Adjust);\r
-          if (FixupData != NULL) {\r
-            *(UINT16 *) FixupData = *Fixup16;\r
-            FixupData             = FixupData + sizeof (UINT16);\r
-          }\r
-          break;\r
-\r
-        case EFI_IMAGE_REL_BASED_HIGHLOW:\r
-          Fixup32   = (UINT32 *) Fixup;\r
-          *Fixup32  = *Fixup32 + (UINT32) Adjust;\r
-          if (FixupData != NULL) {\r
-            FixupData             = ALIGN_POINTER (FixupData, sizeof (UINT32));\r
-            *(UINT32 *)FixupData  = *Fixup32;\r
-            FixupData             = FixupData + sizeof (UINT32);\r
-          }\r
-          break;\r
-\r
-        case EFI_IMAGE_REL_BASED_DIR64:\r
-          Fixup64 = (UINT64 *) Fixup;\r
-          *Fixup64 = *Fixup64 + (UINT64) Adjust;\r
-          if (FixupData != NULL) {\r
-            FixupData = ALIGN_POINTER (FixupData, sizeof(UINT64));\r
-            *(UINT64 *)(FixupData) = *Fixup64;\r
-            FixupData = FixupData + sizeof(UINT64);\r
-          }\r
-          break;\r
-\r
-        default:\r
-          //\r
-          // The common code does not handle architecture specific immediate fixups.\r
-          // PeCoffLoaderRelocateImageEx () adds support for these complex fixups\r
-          // on IPF and ARM, but it is a No-Op on other architectures.\r
-          //\r
-          Status = PeCoffLoaderRelocateImageEx (&Reloc, Fixup, &FixupData, Adjust);\r
-          if (RETURN_ERROR (Status)) {\r
-            ImageContext->ImageError = IMAGE_ERROR_FAILED_RELOCATION;\r
-            return Status;\r
-          }\r
-        }\r
-\r
-        //\r
-        // Next relocation record\r
-        //\r
-        Reloc += 1;\r
-      }\r
-\r
-      //\r
-      // Next reloc block\r
-      //\r
-      RelocBase = (EFI_IMAGE_BASE_RELOCATION *) RelocEnd;\r
-    }\r
-\r
-    //\r
-    // Adjust the EntryPoint to match the linked-to address\r
-    //\r
-    if (ImageContext->DestinationAddress != 0) {\r
-       ImageContext->EntryPoint -= (UINT64) ImageContext->ImageAddress;\r
-       ImageContext->EntryPoint += (UINT64) ImageContext->DestinationAddress;\r
-    }\r
-  }\r
-  \r
-  // Applies additional environment specific actions to relocate fixups \r
-  // to a PE/COFF image if needed\r
-  PeCoffLoaderRelocateImageExtraAction (ImageContext);\r
-  \r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-/**\r
-  Loads a PE/COFF image into memory.\r
-\r
-  Loads the PE/COFF image accessed through the ImageRead service of ImageContext into the buffer\r
-  specified by the ImageAddress and ImageSize fields of ImageContext.  The caller must allocate\r
-  the load buffer and fill in the ImageAddress and ImageSize fields prior to calling this function.\r
-  The EntryPoint, FixupDataSize, CodeView, PdbPointer and HiiResourceData fields of ImageContext are computed.\r
-  The ImageRead, Handle, PeCoffHeaderOffset,  IsTeImage,  Machine, ImageType, ImageAddress, ImageSize, \r
-  DestinationAddress, RelocationsStripped, SectionAlignment, SizeOfHeaders, and DebugDirectoryEntryRva \r
-  fields of the ImageContext structure must be valid prior to invoking this service.\r
-  \r
-  If ImageContext is NULL, then ASSERT().\r
-\r
-  Note that if the platform does not maintain coherency between the instruction cache(s) and the data\r
-  cache(s) in hardware, then the caller is responsible for performing cache maintenance operations\r
-  prior to transferring control to a PE/COFF image that is loaded using this library.\r
-\r
-  @param  ImageContext              The pointer to the image context structure that describes the PE/COFF\r
-                                    image that is being loaded.\r
-\r
-  @retval RETURN_SUCCESS            The PE/COFF image was loaded into the buffer specified by\r
-                                    the ImageAddress and ImageSize fields of ImageContext.\r
-                                    Extended status information is in the ImageError field of ImageContext.\r
-  @retval RETURN_BUFFER_TOO_SMALL   The caller did not provide a large enough buffer.\r
-                                    Extended status information is in the ImageError field of ImageContext.\r
-  @retval RETURN_LOAD_ERROR         The PE/COFF image is an EFI Runtime image with no relocations.\r
-                                    Extended status information is in the ImageError field of ImageContext.\r
-  @retval RETURN_INVALID_PARAMETER  The image address is invalid.\r
-                                    Extended status information is in the ImageError field of ImageContext.\r
-\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-PeCoffLoaderLoadImage (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext\r
-  )\r
-{\r
-  RETURN_STATUS                         Status;\r
-  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION   Hdr;\r
-  PE_COFF_LOADER_IMAGE_CONTEXT          CheckContext;\r
-  EFI_IMAGE_SECTION_HEADER              *FirstSection;\r
-  EFI_IMAGE_SECTION_HEADER              *Section;\r
-  UINTN                                 NumberOfSections;\r
-  UINTN                                 Index;\r
-  CHAR8                                 *Base;\r
-  CHAR8                                 *End;\r
-  CHAR8                                 *MaxEnd;\r
-  EFI_IMAGE_DATA_DIRECTORY              *DirectoryEntry;\r
-  EFI_IMAGE_DEBUG_DIRECTORY_ENTRY       *DebugEntry;\r
-  UINTN                                 Size;\r
-  UINT32                                TempDebugEntryRva;\r
-  UINT32                                NumberOfRvaAndSizes;\r
-  UINT16                                Magic;\r
-  EFI_IMAGE_RESOURCE_DIRECTORY          *ResourceDirectory;\r
-  EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY    *ResourceDirectoryEntry;\r
-  EFI_IMAGE_RESOURCE_DIRECTORY_STRING   *ResourceDirectoryString;\r
-  EFI_IMAGE_RESOURCE_DATA_ENTRY         *ResourceDataEntry;\r
-\r
-\r
-  ASSERT (ImageContext != NULL);\r
-\r
-  //\r
-  // Assume success\r
-  //\r
-  ImageContext->ImageError = IMAGE_ERROR_SUCCESS;\r
-\r
-  //\r
-  // Copy the provided context information into our local version, get what we\r
-  // can from the original image, and then use that to make sure everything\r
-  // is legit.\r
-  //\r
-  CopyMem (&CheckContext, ImageContext, sizeof (PE_COFF_LOADER_IMAGE_CONTEXT));\r
-\r
-  Status = PeCoffLoaderGetImageInfo (&CheckContext);\r
-  if (RETURN_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  //\r
-  // Make sure there is enough allocated space for the image being loaded\r
-  //\r
-  if (ImageContext->ImageSize < CheckContext.ImageSize) {\r
-    ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_SIZE;\r
-    return RETURN_BUFFER_TOO_SMALL;\r
-  }\r
-  if (ImageContext->ImageAddress == 0) {\r
-    //\r
-    // Image cannot be loaded into 0 address.\r
-    //\r
-    ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;\r
-    return RETURN_INVALID_PARAMETER;\r
-  }\r
-  //\r
-  // If there's no relocations, then make sure it's not a runtime driver,\r
-  // and that it's being loaded at the linked address.\r
-  //\r
-  if (CheckContext.RelocationsStripped) {\r
-    //\r
-    // If the image does not contain relocations and it is a runtime driver\r
-    // then return an error.\r
-    //\r
-    if (CheckContext.ImageType == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) {\r
-      ImageContext->ImageError = IMAGE_ERROR_INVALID_SUBSYSTEM;\r
-      return RETURN_LOAD_ERROR;\r
-    }\r
-    //\r
-    // If the image does not contain relocations, and the requested load address\r
-    // is not the linked address, then return an error.\r
-    //\r
-    if (CheckContext.ImageAddress != ImageContext->ImageAddress) {\r
-      ImageContext->ImageError = IMAGE_ERROR_INVALID_IMAGE_ADDRESS;\r
-      return RETURN_INVALID_PARAMETER;\r
-    }\r
-  }\r
-  //\r
-  // Make sure the allocated space has the proper section alignment\r
-  //\r
-  if (!(ImageContext->IsTeImage)) {\r
-    if ((ImageContext->ImageAddress & (CheckContext.SectionAlignment - 1)) != 0) {\r
-      ImageContext->ImageError = IMAGE_ERROR_INVALID_SECTION_ALIGNMENT;\r
-      return RETURN_INVALID_PARAMETER;\r
-    }\r
-  }\r
-  //\r
-  // Read the entire PE/COFF or TE header into memory\r
-  //\r
-  if (!(ImageContext->IsTeImage)) {\r
-    Status = ImageContext->ImageRead (\r
-                            ImageContext->Handle,\r
-                            0,\r
-                            &ImageContext->SizeOfHeaders,\r
-                            (VOID *) (UINTN) ImageContext->ImageAddress\r
-                            );\r
-\r
-    Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINTN)ImageContext->ImageAddress + ImageContext->PeCoffHeaderOffset);\r
-\r
-    FirstSection = (EFI_IMAGE_SECTION_HEADER *) (\r
-                      (UINTN)ImageContext->ImageAddress +\r
-                      ImageContext->PeCoffHeaderOffset +\r
-                      sizeof(UINT32) +\r
-                      sizeof(EFI_IMAGE_FILE_HEADER) +\r
-                      Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
-      );\r
-    NumberOfSections = (UINTN) (Hdr.Pe32->FileHeader.NumberOfSections);\r
-  } else {\r
-    Status = ImageContext->ImageRead (\r
-                            ImageContext->Handle,\r
-                            0,\r
-                            &ImageContext->SizeOfHeaders,\r
-                            (VOID*)(UINTN)ImageContext->ImageAddress\r
-                            );\r
-\r
-    Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);\r
-\r
-    FirstSection = (EFI_IMAGE_SECTION_HEADER *) (\r
-                      (UINTN)ImageContext->ImageAddress +\r
-                      sizeof(EFI_TE_IMAGE_HEADER)\r
-                      );\r
-    NumberOfSections  = (UINTN) (Hdr.Te->NumberOfSections);\r
-\r
-  }\r
-\r
-  if (RETURN_ERROR (Status)) {\r
-    ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-    return RETURN_LOAD_ERROR;\r
-  }\r
-\r
-  //\r
-  // Load each section of the image\r
-  //\r
-  Section = FirstSection;\r
-  for (Index = 0, MaxEnd = NULL; Index < NumberOfSections; Index++) {\r
-    //\r
-    // Read the section\r
-    //\r
-    Size = (UINTN) Section->Misc.VirtualSize;\r
-    if ((Size == 0) || (Size > Section->SizeOfRawData)) {\r
-      Size = (UINTN) Section->SizeOfRawData;\r
-    }\r
-\r
-    //\r
-    // Compute sections address\r
-    //\r
-    Base = PeCoffLoaderImageAddress (ImageContext, Section->VirtualAddress);\r
-    End = PeCoffLoaderImageAddress (\r
-            ImageContext,\r
-            Section->VirtualAddress + Section->Misc.VirtualSize - 1\r
-            );\r
-\r
-    //\r
-    // If the size of the section is non-zero and the base address or end address resolved to 0, then fail.\r
-    //\r
-    if ((Size > 0) && ((Base == NULL) || (End == NULL))) {\r
-      ImageContext->ImageError = IMAGE_ERROR_SECTION_NOT_LOADED;\r
-      return RETURN_LOAD_ERROR;\r
-    }\r
-\r
-    if (ImageContext->IsTeImage) {\r
-      Base = (CHAR8 *)((UINTN) Base + sizeof (EFI_TE_IMAGE_HEADER) - (UINTN)Hdr.Te->StrippedSize);\r
-      End  = (CHAR8 *)((UINTN) End +  sizeof (EFI_TE_IMAGE_HEADER) - (UINTN)Hdr.Te->StrippedSize);\r
-    }\r
-\r
-    if (End > MaxEnd) {\r
-      MaxEnd = End;\r
-    }\r
-\r
-    if (Section->SizeOfRawData > 0) {\r
-      if (!(ImageContext->IsTeImage)) {\r
-        Status = ImageContext->ImageRead (\r
-                                ImageContext->Handle,\r
-                                Section->PointerToRawData,\r
-                                &Size,\r
-                                Base\r
-                                );\r
-      } else {\r
-        Status = ImageContext->ImageRead (\r
-                                ImageContext->Handle,\r
-                                Section->PointerToRawData + sizeof (EFI_TE_IMAGE_HEADER) - (UINTN)Hdr.Te->StrippedSize,\r
-                                &Size,\r
-                                Base\r
-                                );\r
-      }\r
-\r
-      if (RETURN_ERROR (Status)) {\r
-        ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-        return Status;\r
-      }\r
-    }\r
-\r
-    //\r
-    // If raw size is less then virtual size, zero fill the remaining\r
-    //\r
-\r
-    if (Size < Section->Misc.VirtualSize) {\r
-      ZeroMem (Base + Size, Section->Misc.VirtualSize - Size);\r
-    }\r
-\r
-    //\r
-    // Next Section\r
-    //\r
-    Section += 1;\r
-  }\r
-\r
-  //\r
-  // Get image's entry point\r
-  //\r
-  Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr);\r
-  if (!(ImageContext->IsTeImage)) {\r
-    //\r
-    // Sizes of AddressOfEntryPoint are different so we need to do this safely\r
-    //\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (\r
-                                                            ImageContext,\r
-                                                            (UINTN)Hdr.Pe32->OptionalHeader.AddressOfEntryPoint\r
-                                                            );\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      ImageContext->EntryPoint = (PHYSICAL_ADDRESS)(UINTN)PeCoffLoaderImageAddress (\r
-                                                            ImageContext,\r
-                                                            (UINTN)Hdr.Pe32Plus->OptionalHeader.AddressOfEntryPoint\r
-                                                            );\r
-    }\r
-  } else {\r
-    ImageContext->EntryPoint =  (PHYSICAL_ADDRESS) (\r
-                                (UINTN)ImageContext->ImageAddress  +\r
-                                (UINTN)Hdr.Te->AddressOfEntryPoint +\r
-                                (UINTN)sizeof(EFI_TE_IMAGE_HEADER) -\r
-                                (UINTN)Hdr.Te->StrippedSize\r
-                                );\r
-  }\r
-\r
-  //\r
-  // Determine the size of the fixup data\r
-  //\r
-  // Per the PE/COFF spec, you can't assume that a given data directory\r
-  // is present in the image. You have to check the NumberOfRvaAndSizes in\r
-  // the optional header to verify a desired directory entry is there.\r
-  //\r
-  if (!(ImageContext->IsTeImage)) {\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
-      DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC];\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
-      DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC];\r
-    }\r
-\r
-    if (NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {\r
-      ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);\r
-    } else {\r
-      ImageContext->FixupDataSize = 0;\r
-    }\r
-  } else {\r
-    DirectoryEntry              = &Hdr.Te->DataDirectory[0];\r
-    ImageContext->FixupDataSize = DirectoryEntry->Size / sizeof (UINT16) * sizeof (UINTN);\r
-  }\r
-  //\r
-  // Consumer must allocate a buffer for the relocation fixup log.\r
-  // Only used for runtime drivers.\r
-  //\r
-  ImageContext->FixupData = NULL;\r
-\r
-  //\r
-  // Load the Codeview information if present\r
-  //\r
-  if (ImageContext->DebugDirectoryEntryRva != 0) {\r
-    if (!(ImageContext->IsTeImage)) {\r
-      DebugEntry = PeCoffLoaderImageAddress (\r
-                    ImageContext,\r
-                    ImageContext->DebugDirectoryEntryRva\r
-                    );\r
-    } else {\r
-      DebugEntry = (EFI_IMAGE_DEBUG_DIRECTORY_ENTRY *)(UINTN)(\r
-                      ImageContext->ImageAddress +\r
-                      ImageContext->DebugDirectoryEntryRva +\r
-                      sizeof(EFI_TE_IMAGE_HEADER) -\r
-                      Hdr.Te->StrippedSize\r
-                      );\r
-    }\r
-\r
-    if (DebugEntry != NULL) {\r
-      TempDebugEntryRva = DebugEntry->RVA;\r
-      if (DebugEntry->RVA == 0 && DebugEntry->FileOffset != 0) {\r
-        Section--;\r
-        if ((UINTN)Section->SizeOfRawData < Section->Misc.VirtualSize) {\r
-          TempDebugEntryRva = Section->VirtualAddress + Section->Misc.VirtualSize;\r
-        } else {\r
-          TempDebugEntryRva = Section->VirtualAddress + Section->SizeOfRawData;\r
-        }\r
-      }\r
-\r
-      if (TempDebugEntryRva != 0) {\r
-        if (!(ImageContext->IsTeImage)) {\r
-          ImageContext->CodeView = PeCoffLoaderImageAddress (ImageContext, TempDebugEntryRva);\r
-        } else {\r
-          ImageContext->CodeView = (VOID *)(\r
-                                    (UINTN)ImageContext->ImageAddress +\r
-                                    (UINTN)TempDebugEntryRva +\r
-                                    (UINTN)sizeof (EFI_TE_IMAGE_HEADER) -\r
-                                    (UINTN) Hdr.Te->StrippedSize\r
-                                    );\r
-        }\r
-\r
-        if (ImageContext->CodeView == NULL) {\r
-          ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-          return RETURN_LOAD_ERROR;\r
-        }\r
-\r
-        if (DebugEntry->RVA == 0) {\r
-          Size = DebugEntry->SizeOfData;\r
-          if (!(ImageContext->IsTeImage)) {\r
-            Status = ImageContext->ImageRead (\r
-                                    ImageContext->Handle,\r
-                                    DebugEntry->FileOffset,\r
-                                    &Size,\r
-                                    ImageContext->CodeView\r
-                                    );\r
-          } else {\r
-            Status = ImageContext->ImageRead (\r
-                                    ImageContext->Handle,\r
-                                    DebugEntry->FileOffset + sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize,\r
-                                    &Size,\r
-                                    ImageContext->CodeView\r
-                                    );\r
-            //\r
-            // Should we apply fix up to this field according to the size difference between PE and TE?\r
-            // Because now we maintain TE header fields unfixed, this field will also remain as they are\r
-            // in original PE image.\r
-            //\r
-          }\r
-\r
-          if (RETURN_ERROR (Status)) {\r
-            ImageContext->ImageError = IMAGE_ERROR_IMAGE_READ;\r
-            return RETURN_LOAD_ERROR;\r
-          }\r
-\r
-          DebugEntry->RVA = TempDebugEntryRva;\r
-        }\r
-\r
-        switch (*(UINT32 *) ImageContext->CodeView) {\r
-        case CODEVIEW_SIGNATURE_NB10:\r
-          ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_NB10_ENTRY);\r
-          break;\r
-\r
-        case CODEVIEW_SIGNATURE_RSDS:\r
-          ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_RSDS_ENTRY);\r
-          break;\r
-\r
-        case CODEVIEW_SIGNATURE_MTOC:\r
-          ImageContext->PdbPointer = (CHAR8 *)ImageContext->CodeView + sizeof (EFI_IMAGE_DEBUG_CODEVIEW_MTOC_ENTRY);\r
-          break;\r
-\r
-        default:\r
-          break;\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  //\r
-  // Get Image's HII resource section\r
-  //\r
-  ImageContext->HiiResourceData = 0;\r
-  if (!(ImageContext->IsTeImage)) {\r
-    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-      //\r
-      // Use PE32 offset\r
-      //\r
-      DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&Hdr.Pe32->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE];\r
-    } else {\r
-      //\r
-      // Use PE32+ offset\r
-      //\r
-      DirectoryEntry = (EFI_IMAGE_DATA_DIRECTORY *)&Hdr.Pe32Plus->OptionalHeader.DataDirectory[EFI_IMAGE_DIRECTORY_ENTRY_RESOURCE];\r
-    }\r
-\r
-    if (DirectoryEntry->Size != 0) {\r
-      Base = PeCoffLoaderImageAddress (ImageContext, DirectoryEntry->VirtualAddress);\r
-      if (Base != NULL) {\r
-        ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) Base;\r
-        ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
-\r
-        for (Index = 0; Index < ResourceDirectory->NumberOfNamedEntries; Index++) {\r
-          if (ResourceDirectoryEntry->u1.s.NameIsString) {\r
-            ResourceDirectoryString = (EFI_IMAGE_RESOURCE_DIRECTORY_STRING *) (Base + ResourceDirectoryEntry->u1.s.NameOffset);\r
-\r
-            if (ResourceDirectoryString->Length == 3 &&\r
-                ResourceDirectoryString->String[0] == L'H' &&\r
-                ResourceDirectoryString->String[1] == L'I' &&\r
-                ResourceDirectoryString->String[2] == L'I') {\r
-              //\r
-              // Resource Type "HII" found\r
-              //\r
-              if (ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
-                //\r
-                // Move to next level - resource Name\r
-                //\r
-                ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) (Base + ResourceDirectoryEntry->u2.s.OffsetToDirectory);\r
-                ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
-\r
-                if (ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
-                  //\r
-                  // Move to next level - resource Language\r
-                  //\r
-                  ResourceDirectory = (EFI_IMAGE_RESOURCE_DIRECTORY *) (Base + ResourceDirectoryEntry->u2.s.OffsetToDirectory);\r
-                  ResourceDirectoryEntry = (EFI_IMAGE_RESOURCE_DIRECTORY_ENTRY *) (ResourceDirectory + 1);\r
-                }\r
-              }\r
-\r
-              //\r
-              // Now it ought to be resource Data\r
-              //\r
-              if (!ResourceDirectoryEntry->u2.s.DataIsDirectory) {\r
-                ResourceDataEntry = (EFI_IMAGE_RESOURCE_DATA_ENTRY *) (Base + ResourceDirectoryEntry->u2.OffsetToData);\r
-                ImageContext->HiiResourceData = (PHYSICAL_ADDRESS) (UINTN) PeCoffLoaderImageAddress (ImageContext, ResourceDataEntry->OffsetToData);\r
-                break;\r
-              }\r
-            }\r
-          }\r
-          ResourceDirectoryEntry++;\r
-        }\r
-      }\r
-    }\r
-  }\r
\r
-  return Status;\r
-}\r
-\r
-\r
-/**\r
-  Reapply fixups on a fixed up PE32/PE32+ image to allow virutal calling at EFI\r
-  runtime. \r
-  \r
-  This function reapplies relocation fixups to the PE/COFF image specified by ImageBase \r
-  and ImageSize so the image will execute correctly when the PE/COFF image is mapped \r
-  to the address specified by VirtualImageBase.  RelocationData must be identical \r
-  to the FiuxupData buffer from the PE_COFF_LOADER_IMAGE_CONTEXT structure \r
-  after this PE/COFF image was relocated with PeCoffLoaderRelocateImage().\r
-\r
-  Note that if the platform does not maintain coherency between the instruction cache(s) and the data\r
-  cache(s) in hardware, then the caller is responsible for performing cache maintenance operations\r
-  prior to transferring control to a PE/COFF image that is loaded using this library.\r
-\r
-  @param  ImageBase          The base address of a PE/COFF image that has been loaded \r
-                             and relocated into system memory.\r
-  @param  VirtImageBase      The request virtual address that the PE/COFF image is to\r
-                             be fixed up for.\r
-  @param  ImageSize          The size, in bytes, of the PE/COFF image.\r
-  @param  RelocationData     A pointer to the relocation data that was collected when the PE/COFF \r
-                             image was relocated using PeCoffLoaderRelocateImage().\r
-  \r
-**/\r
-VOID\r
-EFIAPI\r
-PeCoffLoaderRelocateImageForRuntime (\r
-  IN  PHYSICAL_ADDRESS        ImageBase,\r
-  IN  PHYSICAL_ADDRESS        VirtImageBase,\r
-  IN  UINTN                   ImageSize,\r
-  IN  VOID                    *RelocationData\r
-  )\r
-{\r
-  CHAR8                               *OldBase;\r
-  CHAR8                               *NewBase;\r
-  EFI_IMAGE_DOS_HEADER                *DosHdr;\r
-  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;\r
-  UINT32                              NumberOfRvaAndSizes;\r
-  EFI_IMAGE_DATA_DIRECTORY            *DataDirectory;\r
-  EFI_IMAGE_DATA_DIRECTORY            *RelocDir;\r
-  EFI_IMAGE_BASE_RELOCATION           *RelocBase;\r
-  EFI_IMAGE_BASE_RELOCATION           *RelocBaseEnd;\r
-  UINT16                              *Reloc;\r
-  UINT16                              *RelocEnd;\r
-  CHAR8                               *Fixup;\r
-  CHAR8                               *FixupBase;\r
-  UINT16                              *Fixup16;\r
-  UINT32                              *Fixup32;\r
-  UINT64                              *Fixup64;\r
-  CHAR8                               *FixupData;\r
-  UINTN                               Adjust;\r
-  RETURN_STATUS                       Status;\r
-  UINT16                              Magic;\r
-\r
-  OldBase = (CHAR8 *)((UINTN)ImageBase);\r
-  NewBase = (CHAR8 *)((UINTN)VirtImageBase);\r
-  Adjust = (UINTN) NewBase - (UINTN) OldBase;\r
-\r
-  //\r
-  // Find the image's relocate dir info\r
-  //\r
-  DosHdr = (EFI_IMAGE_DOS_HEADER *)OldBase;\r
-  if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
-    //\r
-    // Valid DOS header so get address of PE header\r
-    //\r
-    Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)(((CHAR8 *)DosHdr) + DosHdr->e_lfanew);\r
-  } else {\r
-    //\r
-    // No Dos header so assume image starts with PE header.\r
-    //\r
-    Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)OldBase;\r
-  }\r
-\r
-  if (Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
-    //\r
-    // Not a valid PE image so Exit\r
-    //\r
-    return ;\r
-  }\r
-\r
-  Magic = PeCoffLoaderGetPeHeaderMagicValue (Hdr);\r
-\r
-  if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
-    //\r
-    // Use PE32 offset\r
-    //\r
-    NumberOfRvaAndSizes = Hdr.Pe32->OptionalHeader.NumberOfRvaAndSizes;\r
-    DataDirectory = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32->OptionalHeader.DataDirectory[0]);\r
-  } else {\r
-    //\r
-    // Use PE32+ offset\r
-    //\r
-    NumberOfRvaAndSizes = Hdr.Pe32Plus->OptionalHeader.NumberOfRvaAndSizes;\r
-    DataDirectory = (EFI_IMAGE_DATA_DIRECTORY *)&(Hdr.Pe32Plus->OptionalHeader.DataDirectory[0]);\r
-  }\r
-\r
-  //\r
-  // Find the relocation block\r
-  //\r
-  // Per the PE/COFF spec, you can't assume that a given data directory\r
-  // is present in the image. You have to check the NumberOfRvaAndSizes in\r
-  // the optional header to verify a desired directory entry is there.\r
-  //\r
-  if (NumberOfRvaAndSizes > EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC) {\r
-    RelocDir      = DataDirectory + EFI_IMAGE_DIRECTORY_ENTRY_BASERELOC;\r
-    RelocBase     = (EFI_IMAGE_BASE_RELOCATION *)(UINTN)(ImageBase + RelocDir->VirtualAddress);\r
-    RelocBaseEnd  = (EFI_IMAGE_BASE_RELOCATION *)(UINTN)(ImageBase + RelocDir->VirtualAddress + RelocDir->Size);\r
-  } else {\r
-    //\r
-    // Cannot find relocations, cannot continue to relocate the image, ASSERT for this invalid image.\r
-    //\r
-    ASSERT (FALSE);\r
-    return ;\r
-  }\r
-  \r
-  //\r
-  // ASSERT for the invalid image when RelocBase and RelocBaseEnd are both NULL.\r
-  //\r
-  ASSERT (RelocBase != NULL && RelocBaseEnd != NULL);\r
-\r
-  //\r
-  // Run the whole relocation block. And re-fixup data that has not been\r
-  // modified. The FixupData is used to see if the image has been modified\r
-  // since it was relocated. This is so data sections that have been updated\r
-  // by code will not be fixed up, since that would set them back to\r
-  // defaults.\r
-  //\r
-  FixupData = RelocationData;\r
-  while (RelocBase < RelocBaseEnd) {\r
-\r
-    Reloc     = (UINT16 *) ((UINT8 *) RelocBase + sizeof (EFI_IMAGE_BASE_RELOCATION));\r
-    RelocEnd  = (UINT16 *) ((UINT8 *) RelocBase + RelocBase->SizeOfBlock);\r
-    FixupBase = (CHAR8 *) ((UINTN)ImageBase) + RelocBase->VirtualAddress;\r
-\r
-    //\r
-    // Run this relocation record\r
-    //\r
-    while (Reloc < RelocEnd) {\r
-\r
-      Fixup = FixupBase + (*Reloc & 0xFFF);\r
-      switch ((*Reloc) >> 12) {\r
-\r
-      case EFI_IMAGE_REL_BASED_ABSOLUTE:\r
-        break;\r
-\r
-      case EFI_IMAGE_REL_BASED_HIGH:\r
-        Fixup16 = (UINT16 *) Fixup;\r
-        if (*(UINT16 *) FixupData == *Fixup16) {\r
-          *Fixup16 = (UINT16) (*Fixup16 + ((UINT16) ((UINT32) Adjust >> 16)));\r
-        }\r
-\r
-        FixupData = FixupData + sizeof (UINT16);\r
-        break;\r
-\r
-      case EFI_IMAGE_REL_BASED_LOW:\r
-        Fixup16 = (UINT16 *) Fixup;\r
-        if (*(UINT16 *) FixupData == *Fixup16) {\r
-          *Fixup16 = (UINT16) (*Fixup16 + ((UINT16) Adjust & 0xffff));\r
-        }\r
-\r
-        FixupData = FixupData + sizeof (UINT16);\r
-        break;\r
-\r
-      case EFI_IMAGE_REL_BASED_HIGHLOW:\r
-        Fixup32       = (UINT32 *) Fixup;\r
-        FixupData = ALIGN_POINTER (FixupData, sizeof (UINT32));\r
-        if (*(UINT32 *) FixupData == *Fixup32) {\r
-          *Fixup32 = *Fixup32 + (UINT32) Adjust;\r
-        }\r
-\r
-        FixupData = FixupData + sizeof (UINT32);\r
-        break;\r
-\r
-      case EFI_IMAGE_REL_BASED_DIR64:\r
-        Fixup64       = (UINT64 *)Fixup;\r
-        FixupData = ALIGN_POINTER (FixupData, sizeof (UINT64));\r
-        if (*(UINT64 *) FixupData == *Fixup64) {\r
-          *Fixup64 = *Fixup64 + (UINT64)Adjust;\r
-        }\r
-\r
-        FixupData = FixupData + sizeof (UINT64);\r
-        break;\r
-\r
-      case EFI_IMAGE_REL_BASED_HIGHADJ:\r
-        //\r
-        // Not valid Relocation type for UEFI image, ASSERT\r
-        //\r
-        ASSERT (FALSE);\r
-        break;\r
-\r
-      default:\r
-        //\r
-        // Only Itanium requires ConvertPeImage_Ex\r
-        //\r
-        Status = PeHotRelocateImageEx (&Reloc, Fixup, &FixupData, Adjust);\r
-        if (RETURN_ERROR (Status)) {\r
-          return ;\r
-        }\r
-      }\r
-      //\r
-      // Next relocation record\r
-      //\r
-      Reloc += 1;\r
-    }\r
-    //\r
-    // next reloc block\r
-    //\r
-    RelocBase = (EFI_IMAGE_BASE_RELOCATION *) RelocEnd;\r
-  }\r
-}\r
-\r
-\r
-/**\r
-  Reads contents of a PE/COFF image from a buffer in system memory.\r
-   \r
-  This is the default implementation of a PE_COFF_LOADER_READ_FILE function \r
-  that assumes FileHandle pointer to the beginning of a PE/COFF image.   \r
-  This function reads contents of the PE/COFF image that starts at the system memory \r
-  address specified by FileHandle.  The read operation copies ReadSize bytes from the \r
-  PE/COFF image starting at byte offset FileOffset into the buffer specified by Buffer.  \r
-  The size of the buffer actually read is returned in ReadSize.\r
-  \r
-  If FileHandle is NULL, then ASSERT().\r
-  If ReadSize is NULL, then ASSERT().\r
-  If Buffer is NULL, then ASSERT().\r
-\r
-  @param  FileHandle        The pointer to base of the input stream\r
-  @param  FileOffset        Offset into the PE/COFF image to begin the read operation.\r
-  @param  ReadSize          On input, the size in bytes of the requested read operation.  \r
-                            On output, the number of bytes actually read.\r
-  @param  Buffer            Output buffer that contains the data read from the PE/COFF image.\r
-\r
-  @retval RETURN_SUCCESS    Data is read from FileOffset from the Handle into \r
-                            the buffer.\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-PeCoffLoaderImageReadFromMemory (\r
-  IN     VOID    *FileHandle,\r
-  IN     UINTN   FileOffset,\r
-  IN OUT UINTN   *ReadSize,\r
-  OUT    VOID    *Buffer\r
-  )\r
-{\r
-  ASSERT (ReadSize != NULL);\r
-  ASSERT (FileHandle != NULL);\r
-  ASSERT (Buffer != NULL);\r
-\r
-  CopyMem (Buffer, ((UINT8 *)FileHandle) + FileOffset, *ReadSize);\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-/**\r
-  Unloads a loaded PE/COFF image from memory and releases its taken resource.\r
-  Releases any environment specific resources that were allocated when the image \r
-  specified by ImageContext was loaded using PeCoffLoaderLoadImage(). \r
\r
-  For NT32 emulator, the PE/COFF image loaded by system needs to release.\r
-  For real platform, the PE/COFF image loaded by Core doesn't needs to be unloaded, \r
-  this function can simply return RETURN_SUCCESS.\r
-  \r
-  If ImageContext is NULL, then ASSERT().\r
-  \r
-  @param  ImageContext              The pointer to the image context structure that describes the PE/COFF\r
-                                    image to be unloaded.\r
-\r
-  @retval RETURN_SUCCESS            The PE/COFF image was unloaded successfully.\r
-**/\r
-RETURN_STATUS\r
-EFIAPI\r
-PeCoffLoaderUnloadImage (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext\r
-  )\r
-{\r
-  //\r
-  // Applies additional environment specific actions to unload a \r
-  // PE/COFF image if needed\r
-  //\r
-  PeCoffLoaderUnloadImageExtraAction (ImageContext);\r
-  return RETURN_SUCCESS;\r
-}\r
diff --git a/ArmPkg/Library/BasePeCoffLib/BasePeCoffLib.inf b/ArmPkg/Library/BasePeCoffLib/BasePeCoffLib.inf
deleted file mode 100755 (executable)
index 929d789..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-## @file\r
-#  PE/COFF Loader Library implementation.\r
-#  The IPF version library supports loading IPF and EBC PE/COFF image.\r
-#  The IA32 version library support loading IA32, X64 and EBC PE/COFF images.\r
-#  The X64 version library support loading IA32, X64 and EBC PE/COFF images.\r
-#\r
-#  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-#  Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-#  Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR>\r
-#\r
-#  This program and the accompanying materials\r
-#  are licensed and made available under the terms and conditions of the BSD License\r
-#  which accompanies this distribution. The full text of the license may be found at\r
-#  http://opensource.org/licenses/bsd-license.php.\r
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-#\r
-##\r
-\r
-[Defines]\r
-  INF_VERSION                    = 0x00010005\r
-  BASE_NAME                      = MovtBasePeCoffLib\r
-  FILE_GUID                      = 11D2AB02-24BD-468b-BB84-E1CD5330BB13\r
-  MODULE_TYPE                    = BASE\r
-  VERSION_STRING                 = 1.0\r
-  LIBRARY_CLASS                  = PeCoffLib \r
-\r
-\r
-#\r
-#  VALID_ARCHITECTURES           = IA32 X64 IPF EBC ARM AARCH64\r
-#\r
-\r
-[Sources]\r
-  BasePeCoffLibInternals.h\r
-  BasePeCoff.c\r
-\r
-[Sources.IA32, Sources.X64, Sources.EBC]\r
-  PeCoffLoaderEx.c\r
-\r
-[Sources.IPF]\r
-  Ipf/PeCoffLoaderEx.c\r
-\r
-[Sources.ARM]\r
-  Arm/PeCoffLoaderEx.c\r
-\r
-[Sources.AARCH64]\r
-  AArch64/PeCoffLoaderEx.c\r
-\r
-[Packages]\r
-  MdePkg/MdePkg.dec\r
-\r
-[LibraryClasses]\r
-  DebugLib\r
-  PeCoffExtraActionLib\r
-  BaseMemoryLib\r
-\r
diff --git a/ArmPkg/Library/BasePeCoffLib/BasePeCoffLibInternals.h b/ArmPkg/Library/BasePeCoffLib/BasePeCoffLibInternals.h
deleted file mode 100755 (executable)
index 9116fc8..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/** @file\r
-  Declaration of internal functions in PE/COFF Lib.\r
-\r
-  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#ifndef __BASE_PECOFF_LIB_INTERNALS__\r
-#define __BASE_PECOFF_LIB_INTERNALS__\r
-\r
-#include <Base.h>\r
-#include <Library/PeCoffLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/PeCoffExtraActionLib.h>\r
-#include <IndustryStandard/PeImage.h>\r
-\r
-\r
-\r
-/**\r
-  Performs an Itanium-based specific relocation fixup and is a no-op on other\r
-  instruction sets.\r
-\r
-  @param  Reloc       Pointer to Pointer to the relocation record.\r
-  @param  Fixup       Pointer to the address to fix up.\r
-  @param  FixupData   Pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  );\r
-\r
-\r
-/**\r
-  Performs an Itanium-based specific re-relocation fixup and is a no-op on other\r
-  instruction sets. This is used to re-relocated the image into the EFI virtual\r
-  space for runtime calls.\r
-\r
-  @param  Reloc       Pointer to pointer to the relocation record.\r
-  @param  Fixup       Pointer to the address to fix up.\r
-  @param  FixupData   Pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeHotRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  );\r
-\r
-\r
-/**\r
-  Returns TRUE if the machine type of PE/COFF image is supported. Supported\r
-  does not mean the image can be executed it means the PE/COFF loader supports\r
-  loading and relocating of the image type. It's up to the caller to support\r
-  the entry point.\r
-\r
-  @param  Machine   Machine type from the PE Header.\r
-\r
-  @return TRUE if this PE/COFF loader can load the image\r
-\r
-**/\r
-BOOLEAN\r
-PeCoffLoaderImageFormatSupported (\r
-  IN  UINT16  Machine\r
-  );\r
-\r
-/**\r
-  Retrieves the magic value from the PE/COFF header.\r
-\r
-  @param  Hdr             The buffer in which to return the PE32, PE32+, or TE header.\r
-\r
-  @return EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC - Image is PE32\r
-  @return EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC - Image is PE32+\r
-\r
-**/\r
-UINT16\r
-PeCoffLoaderGetPeHeaderMagicValue (\r
-  IN  EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION  Hdr\r
-  );\r
-\r
-/**\r
-  Retrieves the PE or TE Header from a PE/COFF or TE image.\r
-\r
-  @param  ImageContext    The context of the image being loaded.\r
-  @param  Hdr             The buffer in which to return the PE32, PE32+, or TE header.\r
-\r
-  @retval RETURN_SUCCESS  The PE or TE Header is read.\r
-  @retval Other           The error status from reading the PE/COFF or TE image using the ImageRead function.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderGetPeHeader (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT         *ImageContext,\r
-  OUT    EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION  Hdr\r
-  );\r
-\r
-/**\r
-  Converts an image address to the loaded address.\r
-\r
-  @param  ImageContext  The context of the image being loaded.\r
-  @param  Address       The address to be converted to the loaded address.\r
-\r
-  @return The converted address or NULL if the address can not be converted.\r
-\r
-**/\r
-VOID *\r
-PeCoffLoaderImageAddress (\r
-  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT          *ImageContext,\r
-  IN     UINTN                                 Address\r
-  );\r
-\r
-#endif\r
diff --git a/ArmPkg/Library/BasePeCoffLib/Ipf/PeCoffLoaderEx.c b/ArmPkg/Library/BasePeCoffLib/Ipf/PeCoffLoaderEx.c
deleted file mode 100755 (executable)
index 5c92381..0000000
+++ /dev/null
@@ -1,420 +0,0 @@
-/** @file\r
-  Fixes Intel Itanium(TM) specific relocation types.\r
-\r
-  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BasePeCoffLibInternals.h"\r
-\r
-\r
-\r
-#define EXT_IMM64(Value, Address, Size, InstPos, ValPos)  \\r
-    Value |= (((UINT64)((*(Address) >> InstPos) & (((UINT64)1 << Size) - 1))) << ValPos)\r
-\r
-#define INS_IMM64(Value, Address, Size, InstPos, ValPos)  \\r
-    *(UINT32*)Address = (*(UINT32*)Address & ~(((1 << Size) - 1) << InstPos)) | \\r
-          ((UINT32)((((UINT64)Value >> ValPos) & (((UINT64)1 << Size) - 1))) << InstPos)\r
-\r
-#define IMM64_IMM7B_INST_WORD_X         3\r
-#define IMM64_IMM7B_SIZE_X              7\r
-#define IMM64_IMM7B_INST_WORD_POS_X     4\r
-#define IMM64_IMM7B_VAL_POS_X           0\r
-\r
-#define IMM64_IMM9D_INST_WORD_X         3\r
-#define IMM64_IMM9D_SIZE_X              9\r
-#define IMM64_IMM9D_INST_WORD_POS_X     18\r
-#define IMM64_IMM9D_VAL_POS_X           7\r
-\r
-#define IMM64_IMM5C_INST_WORD_X         3\r
-#define IMM64_IMM5C_SIZE_X              5\r
-#define IMM64_IMM5C_INST_WORD_POS_X     13\r
-#define IMM64_IMM5C_VAL_POS_X           16\r
-\r
-#define IMM64_IC_INST_WORD_X            3\r
-#define IMM64_IC_SIZE_X                 1\r
-#define IMM64_IC_INST_WORD_POS_X        12\r
-#define IMM64_IC_VAL_POS_X              21\r
-\r
-#define IMM64_IMM41A_INST_WORD_X        1\r
-#define IMM64_IMM41A_SIZE_X             10\r
-#define IMM64_IMM41A_INST_WORD_POS_X    14\r
-#define IMM64_IMM41A_VAL_POS_X          22\r
-\r
-#define IMM64_IMM41B_INST_WORD_X        1\r
-#define IMM64_IMM41B_SIZE_X             8\r
-#define IMM64_IMM41B_INST_WORD_POS_X    24\r
-#define IMM64_IMM41B_VAL_POS_X          32\r
-\r
-#define IMM64_IMM41C_INST_WORD_X        2\r
-#define IMM64_IMM41C_SIZE_X             23\r
-#define IMM64_IMM41C_INST_WORD_POS_X    0\r
-#define IMM64_IMM41C_VAL_POS_X          40\r
-\r
-#define IMM64_SIGN_INST_WORD_X          3\r
-#define IMM64_SIGN_SIZE_X               1\r
-#define IMM64_SIGN_INST_WORD_POS_X      27\r
-#define IMM64_SIGN_VAL_POS_X            63\r
-\r
-/**\r
-  Performs an Itanium-based specific relocation fixup.\r
-\r
-  @param  Reloc       The pointer to the relocation record.\r
-  @param  Fixup       The pointer to the address to fix up.\r
-  @param  FixupData   The pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @retval RETURN_SUCCESS Succeed to fix the relocation entry.\r
-  @retval RETURN_UNSUPPOTED Unrecoganized relocation entry.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT64      *Fixup64;\r
-  UINT64      FixupVal;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-    case EFI_IMAGE_REL_BASED_IA64_IMM64:\r
-\r
-      //\r
-      // Align it to bundle address before fixing up the\r
-      // 64-bit immediate value of the movl instruction.\r
-      //\r
-\r
-      Fixup = (CHAR8 *)((UINTN) Fixup & (UINTN) ~(15));\r
-      FixupVal = (UINT64)0;\r
-\r
-      //\r
-      // Extract the lower 32 bits of IMM64 from bundle\r
-      //\r
-      EXT_IMM64(FixupVal,\r
-                (UINT32 *)Fixup + IMM64_IMM7B_INST_WORD_X,\r
-                IMM64_IMM7B_SIZE_X,\r
-                IMM64_IMM7B_INST_WORD_POS_X,\r
-                IMM64_IMM7B_VAL_POS_X\r
-                );\r
-\r
-      EXT_IMM64(FixupVal,\r
-                (UINT32 *)Fixup + IMM64_IMM9D_INST_WORD_X,\r
-                IMM64_IMM9D_SIZE_X,\r
-                IMM64_IMM9D_INST_WORD_POS_X,\r
-                IMM64_IMM9D_VAL_POS_X\r
-                );\r
-\r
-      EXT_IMM64(FixupVal,\r
-                (UINT32 *)Fixup + IMM64_IMM5C_INST_WORD_X,\r
-                IMM64_IMM5C_SIZE_X,\r
-                IMM64_IMM5C_INST_WORD_POS_X,\r
-                IMM64_IMM5C_VAL_POS_X\r
-                );\r
-\r
-      EXT_IMM64(FixupVal,\r
-                (UINT32 *)Fixup + IMM64_IC_INST_WORD_X,\r
-                IMM64_IC_SIZE_X,\r
-                IMM64_IC_INST_WORD_POS_X,\r
-                IMM64_IC_VAL_POS_X\r
-                );\r
-\r
-      EXT_IMM64(FixupVal,\r
-                (UINT32 *)Fixup + IMM64_IMM41A_INST_WORD_X,\r
-                IMM64_IMM41A_SIZE_X,\r
-                IMM64_IMM41A_INST_WORD_POS_X,\r
-                IMM64_IMM41A_VAL_POS_X\r
-                );\r
-\r
-      //\r
-      // Update 64-bit address\r
-      //\r
-      FixupVal += Adjust;\r
-\r
-      //\r
-      // Insert IMM64 into bundle\r
-      //\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM7B_INST_WORD_X),\r
-                IMM64_IMM7B_SIZE_X,\r
-                IMM64_IMM7B_INST_WORD_POS_X,\r
-                IMM64_IMM7B_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM9D_INST_WORD_X),\r
-                IMM64_IMM9D_SIZE_X,\r
-                IMM64_IMM9D_INST_WORD_POS_X,\r
-                IMM64_IMM9D_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM5C_INST_WORD_X),\r
-                IMM64_IMM5C_SIZE_X,\r
-                IMM64_IMM5C_INST_WORD_POS_X,\r
-                IMM64_IMM5C_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IC_INST_WORD_X),\r
-                IMM64_IC_SIZE_X,\r
-                IMM64_IC_INST_WORD_POS_X,\r
-                IMM64_IC_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM41A_INST_WORD_X),\r
-                IMM64_IMM41A_SIZE_X,\r
-                IMM64_IMM41A_INST_WORD_POS_X,\r
-                IMM64_IMM41A_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM41B_INST_WORD_X),\r
-                IMM64_IMM41B_SIZE_X,\r
-                IMM64_IMM41B_INST_WORD_POS_X,\r
-                IMM64_IMM41B_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_IMM41C_INST_WORD_X),\r
-                IMM64_IMM41C_SIZE_X,\r
-                IMM64_IMM41C_INST_WORD_POS_X,\r
-                IMM64_IMM41C_VAL_POS_X\r
-                );\r
-\r
-      INS_IMM64(FixupVal,\r
-                ((UINT32 *)Fixup + IMM64_SIGN_INST_WORD_X),\r
-                IMM64_SIGN_SIZE_X,\r
-                IMM64_SIGN_INST_WORD_POS_X,\r
-                IMM64_SIGN_VAL_POS_X\r
-                );\r
-\r
-      Fixup64 = (UINT64 *) Fixup;\r
-      if (*FixupData != NULL) {\r
-        *FixupData = ALIGN_POINTER(*FixupData, sizeof(UINT64));\r
-        *(UINT64 *)(*FixupData) = *Fixup64;\r
-        *FixupData = *FixupData + sizeof(UINT64);\r
-      }\r
-      break;\r
-\r
-    default:\r
-      return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-/**\r
-  Returns TRUE if the machine type of PE/COFF image is supported. Supported\r
-  does not mean the image can be executed it means the PE/COFF loader supports\r
-  loading and relocating of the image type. It's up to the caller to support\r
-  the entry point. \r
-  \r
-  The itanium version PE/COFF loader/relocater supports itanium and EBC image.\r
-\r
-  @param  Machine   Machine type from the PE Header.\r
-\r
-  @return TRUE if this PE/COFF loader can load the image\r
-  @return FALSE unrecoganized machine type of image.\r
-\r
-**/\r
-BOOLEAN\r
-PeCoffLoaderImageFormatSupported (\r
-  IN  UINT16  Machine\r
-  )\r
-{\r
-  if ((Machine == IMAGE_FILE_MACHINE_IA64) || (Machine == IMAGE_FILE_MACHINE_EBC)) {\r
-    return TRUE;\r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-\r
-/**\r
-  Performs an Itanium-based specific relocation fixup and is a no-op on other\r
-  instruction sets.\r
-\r
-  @param  Reloc       Pointer to Pointer to the relocation record.\r
-  @param  Fixup       Pointer to the address to fix up.\r
-  @param  FixupData   Pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeHotRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  UINT64  *Fixup64;\r
-  UINT64  FixupVal;\r
-\r
-  switch ((**Reloc) >> 12) {\r
-  case EFI_IMAGE_REL_BASED_DIR64:\r
-    Fixup64     = (UINT64 *) Fixup;\r
-    *FixupData  = ALIGN_POINTER (*FixupData, sizeof (UINT64));\r
-    if (*(UINT64 *) (*FixupData) == *Fixup64) {\r
-      *Fixup64 = *Fixup64 + (UINT64) Adjust;\r
-    }\r
-\r
-    *FixupData = *FixupData + sizeof (UINT64);\r
-    break;\r
-\r
-  case EFI_IMAGE_REL_BASED_IA64_IMM64:\r
-    Fixup64     = (UINT64 *) Fixup;\r
-    *FixupData  = ALIGN_POINTER (*FixupData, sizeof (UINT64));\r
-    if (*(UINT64 *) (*FixupData) == *Fixup64) {\r
-      //\r
-      // Align it to bundle address before fixing up the\r
-      // 64-bit immediate value of the movl instruction.\r
-      //\r
-      //\r
-      Fixup     = (CHAR8 *) ((UINT64) Fixup & (UINT64)~(15));\r
-      FixupVal  = (UINT64) 0;\r
-\r
-      //\r
-      // Extract the lower 32 bits of IMM64 from bundle\r
-      //\r
-      EXT_IMM64 (\r
-        FixupVal,\r
-        (UINT32 *) Fixup + IMM64_IMM7B_INST_WORD_X,\r
-        IMM64_IMM7B_SIZE_X,\r
-        IMM64_IMM7B_INST_WORD_POS_X,\r
-        IMM64_IMM7B_VAL_POS_X\r
-        );\r
-\r
-      EXT_IMM64 (\r
-        FixupVal,\r
-        (UINT32 *) Fixup + IMM64_IMM9D_INST_WORD_X,\r
-        IMM64_IMM9D_SIZE_X,\r
-        IMM64_IMM9D_INST_WORD_POS_X,\r
-        IMM64_IMM9D_VAL_POS_X\r
-        );\r
-\r
-      EXT_IMM64 (\r
-        FixupVal,\r
-        (UINT32 *) Fixup + IMM64_IMM5C_INST_WORD_X,\r
-        IMM64_IMM5C_SIZE_X,\r
-        IMM64_IMM5C_INST_WORD_POS_X,\r
-        IMM64_IMM5C_VAL_POS_X\r
-        );\r
-\r
-      EXT_IMM64 (\r
-        FixupVal,\r
-        (UINT32 *) Fixup + IMM64_IC_INST_WORD_X,\r
-        IMM64_IC_SIZE_X,\r
-        IMM64_IC_INST_WORD_POS_X,\r
-        IMM64_IC_VAL_POS_X\r
-        );\r
-\r
-      EXT_IMM64 (\r
-        FixupVal,\r
-        (UINT32 *) Fixup + IMM64_IMM41A_INST_WORD_X,\r
-        IMM64_IMM41A_SIZE_X,\r
-        IMM64_IMM41A_INST_WORD_POS_X,\r
-        IMM64_IMM41A_VAL_POS_X\r
-        );\r
-\r
-      //\r
-      // Update 64-bit address\r
-      //\r
-      FixupVal += Adjust;\r
-\r
-      //\r
-      // Insert IMM64 into bundle\r
-      //\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM7B_INST_WORD_X),\r
-        IMM64_IMM7B_SIZE_X,\r
-        IMM64_IMM7B_INST_WORD_POS_X,\r
-        IMM64_IMM7B_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM9D_INST_WORD_X),\r
-        IMM64_IMM9D_SIZE_X,\r
-        IMM64_IMM9D_INST_WORD_POS_X,\r
-        IMM64_IMM9D_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM5C_INST_WORD_X),\r
-        IMM64_IMM5C_SIZE_X,\r
-        IMM64_IMM5C_INST_WORD_POS_X,\r
-        IMM64_IMM5C_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IC_INST_WORD_X),\r
-        IMM64_IC_SIZE_X,\r
-        IMM64_IC_INST_WORD_POS_X,\r
-        IMM64_IC_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM41A_INST_WORD_X),\r
-        IMM64_IMM41A_SIZE_X,\r
-        IMM64_IMM41A_INST_WORD_POS_X,\r
-        IMM64_IMM41A_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM41B_INST_WORD_X),\r
-        IMM64_IMM41B_SIZE_X,\r
-        IMM64_IMM41B_INST_WORD_POS_X,\r
-        IMM64_IMM41B_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_IMM41C_INST_WORD_X),\r
-        IMM64_IMM41C_SIZE_X,\r
-        IMM64_IMM41C_INST_WORD_POS_X,\r
-        IMM64_IMM41C_VAL_POS_X\r
-        );\r
-\r
-      INS_IMM64 (\r
-        FixupVal,\r
-        ((UINT32 *) Fixup + IMM64_SIGN_INST_WORD_X),\r
-        IMM64_SIGN_SIZE_X,\r
-        IMM64_SIGN_INST_WORD_POS_X,\r
-        IMM64_SIGN_VAL_POS_X\r
-        );\r
-\r
-      *(UINT64 *) (*FixupData) = *Fixup64;\r
-    }\r
-\r
-    *FixupData = *FixupData + sizeof (UINT64);\r
-    break;\r
-\r
-  default:\r
-    DEBUG ((EFI_D_ERROR, "PeHotRelocateEx:unknown fixed type\n"));\r
-    return RETURN_UNSUPPORTED;\r
-  }\r
-\r
-  return RETURN_SUCCESS;\r
-}\r
-\r
-\r
-\r
diff --git a/ArmPkg/Library/BasePeCoffLib/PeCoffLoaderEx.c b/ArmPkg/Library/BasePeCoffLib/PeCoffLoaderEx.c
deleted file mode 100755 (executable)
index cd54c1c..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/** @file\r
-  Specific relocation fixups for none Itanium architecture.\r
-\r
-  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php.\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "BasePeCoffLibInternals.h"\r
-\r
-\r
-/**\r
-  Performs an Itanium-based specific relocation fixup and is a no-op on other\r
-  instruction sets.\r
-\r
-  @param  Reloc       The pointer to the relocation record.\r
-  @param  Fixup       The pointer to the address to fix up.\r
-  @param  FixupData   The pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  return RETURN_UNSUPPORTED;\r
-}\r
-\r
-/**\r
-  Returns TRUE if the machine type of PE/COFF image is supported. Supported\r
-  does not mean the image can be executed it means the PE/COFF loader supports\r
-  loading and relocating of the image type. It's up to the caller to support\r
-  the entry point.\r
-  \r
-  The IA32/X64 version PE/COFF loader/relocater both support IA32, X64 and EBC images.\r
-\r
-  @param  Machine   The machine type from the PE Header.\r
-\r
-  @return TRUE if this PE/COFF loader can load the image\r
-\r
-**/\r
-BOOLEAN\r
-PeCoffLoaderImageFormatSupported (\r
-  IN  UINT16  Machine\r
-  )\r
-{\r
-  if ((Machine == IMAGE_FILE_MACHINE_I386) || (Machine == IMAGE_FILE_MACHINE_X64) || \r
-      (Machine ==  IMAGE_FILE_MACHINE_EBC)) {\r
-    return TRUE; \r
-  }\r
-\r
-  return FALSE;\r
-}\r
-\r
-/**\r
-  Performs an Itanium-based specific re-relocation fixup and is a no-op on other\r
-  instruction sets. This is used to re-relocated the image into the EFI virtual\r
-  space for runtime calls.\r
-\r
-  @param  Reloc       Pointer to pointer to the relocation record.\r
-  @param  Fixup       Pointer to the address to fix up.\r
-  @param  FixupData   Pointer to a buffer to log the fixups.\r
-  @param  Adjust      The offset to adjust the fixup.\r
-\r
-  @return Status code.\r
-\r
-**/\r
-RETURN_STATUS\r
-PeHotRelocateImageEx (\r
-  IN UINT16      **Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  )\r
-{\r
-  return RETURN_UNSUPPORTED;\r
-}\r
-\r
index d24a1bca187ff57bf35b9e877a90a58805a6c7bb..caf6182c4ba1473e0c8c69efb6513bee08164dc0 100644 (file)
   ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf\r
   LzmaDecompressLib|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf\r
 \r
-  # Temp work around for Movt relocation issue. \r
-  #PeCoffLib|ArmPkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
   PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf\r
   \r
   HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf\r