]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/PeCoffLib: handle EFI_IMAGE_REL_BASED_DIR64 in generic code
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Tue, 14 Jul 2015 08:15:28 +0000 (08:15 +0000)
committerabiesheuvel <abiesheuvel@Edk2>
Tue, 14 Jul 2015 08:15:28 +0000 (08:15 +0000)
Relocations of type EFI_IMAGE_REL_BASED_DIR64 are handled in exactly
the same way on all 64-bit machine types (IPF, X64 and AARCH64).
So move the handling of this type to the generic part of the relocation
routine PeCoffLoaderRelocateImage ().

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Yingke Liu <yingke.d.liu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17942 6f19259b-4bc3-4df7-8a09-765794883524

BaseTools/Source/C/Common/BasePeCoff.c
BaseTools/Source/C/Common/PeCoffLoaderEx.c

index afb45df40b8486ec2383780cd88fb6753be1262e..9652557d13bca8025b4b893d893108c0bf4cdfb6 100644 (file)
@@ -56,14 +56,6 @@ PeCoffLoaderRelocateIa32Image (
   IN UINT64      Adjust\r
   );\r
 \r
-RETURN_STATUS\r
-PeCoffLoaderRelocateX64Image (\r
-  IN UINT16      *Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  );\r
-\r
 RETURN_STATUS\r
 PeCoffLoaderRelocateIpfImage (\r
   IN UINT16      *Reloc,\r
@@ -80,14 +72,6 @@ PeCoffLoaderRelocateArmImage (
   IN UINT64      Adjust\r
   );\r
 \r
-RETURN_STATUS\r
-PeCoffLoaderRelocateAArch64Image (\r
-  IN UINT16      *Reloc,\r
-  IN OUT CHAR8   *Fixup,\r
-  IN OUT CHAR8   **FixupData,\r
-  IN UINT64      Adjust\r
-  );\r
-\r
 STATIC\r
 RETURN_STATUS\r
 PeCoffLoaderGetPeHeader (\r
@@ -619,6 +603,7 @@ Returns:
   CHAR8                                 *FixupBase;\r
   UINT16                                *F16;\r
   UINT32                                *F32;\r
+  UINT64                                *F64;\r
   CHAR8                                 *FixupData;\r
   PHYSICAL_ADDRESS                      BaseAddress;\r
   UINT16                                MachineType;\r
@@ -778,6 +763,16 @@ Returns:
         }\r
         break;\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
       case EFI_IMAGE_REL_BASED_HIGHADJ:\r
         //\r
         // Return the same EFI_UNSUPPORTED return code as\r
@@ -795,15 +790,9 @@ Returns:
         case EFI_IMAGE_MACHINE_ARMT:\r
           Status = PeCoffLoaderRelocateArmImage (&Reloc, Fixup, &FixupData, Adjust);\r
           break;\r
-        case EFI_IMAGE_MACHINE_X64:\r
-          Status = PeCoffLoaderRelocateX64Image (Reloc, Fixup, &FixupData, Adjust);\r
-          break;\r
         case EFI_IMAGE_MACHINE_IA64:\r
           Status = PeCoffLoaderRelocateIpfImage (Reloc, Fixup, &FixupData, Adjust);\r
           break;\r
-        case EFI_IMAGE_MACHINE_AARCH64:\r
-          Status = PeCoffLoaderRelocateAArch64Image (Reloc, Fixup, &FixupData, Adjust);\r
-          break;\r
         default:\r
           Status = RETURN_UNSUPPORTED;\r
           break;\r
index b7b7227f57d42d44789c9968a0285a4fbb7e495e..382138a8937e505ddfa79f76943800e0ba1cbc0b 100644 (file)
@@ -133,16 +133,6 @@ Returns:
 \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
     case EFI_IMAGE_REL_BASED_IA64_IMM64:\r
 \r
       //\r
@@ -270,46 +260,6 @@ Returns:
   return RETURN_SUCCESS;\r
 }\r
 \r
-RETURN_STATUS\r
-PeCoffLoaderRelocateX64Image (\r
-  IN     UINT16       *Reloc,\r
-  IN OUT CHAR8        *Fixup, \r
-  IN OUT CHAR8        **FixupData,\r
-  IN     UINT64       Adjust\r
-  )\r
-/**\r
-  Performs an x64 specific relocation fixup\r
-\r
-  @param Reloc        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
-  @retval RETURN_SUCCESS      Success to perform relocation\r
-  @retval RETURN_UNSUPPORTED  Unsupported.\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
   Pass in a pointer to an ARM MOVT or MOVW immediate instruciton and \r
   return the immediate data encoded in the instruction\r
@@ -465,43 +415,3 @@ PeCoffLoaderRelocateArmImage (
 \r
   return RETURN_SUCCESS;\r
 }\r
-\r
-RETURN_STATUS\r
-PeCoffLoaderRelocateAArch64Image (\r
-  IN     UINT16       *Reloc,\r
-  IN OUT CHAR8        *Fixup,\r
-  IN OUT CHAR8        **FixupData,\r
-  IN     UINT64       Adjust\r
-  )\r
-/**\r
-  Performs an AArch64 specific relocation fixup\r
-\r
-  @param Reloc        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
-  @retval RETURN_SUCCESS      Success to perform relocation\r
-  @retval RETURN_UNSUPPORTED  Unsupported.\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