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
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
CHAR8 *FixupBase;\r
UINT16 *F16;\r
UINT32 *F32;\r
+ UINT64 *F64;\r
CHAR8 *FixupData;\r
PHYSICAL_ADDRESS BaseAddress;\r
UINT16 MachineType;\r
}\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
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
\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
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
\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