\r
**/\r
\r
-//\r
-// Include common header file for this module.\r
-//\r
+\r
\r
\r
#include "BasePeCoffLibInternals.h"\r
//\r
if (ImageContext->DestinationAddress != 0) {\r
BaseAddress = ImageContext->DestinationAddress;\r
- } else if (!(ImageContext->IsTeImage)) {\r
- BaseAddress = ImageContext->ImageAddress;\r
} else {\r
- Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);\r
- BaseAddress = ImageContext->ImageAddress + sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->StrippedSize; \r
+ BaseAddress = ImageContext->ImageAddress;\r
}\r
\r
if (!(ImageContext->IsTeImage)) {\r
}\r
} else {\r
Hdr.Te = (EFI_TE_IMAGE_HEADER *)(UINTN)(ImageContext->ImageAddress);\r
- Adjust = (UINT64) (BaseAddress - Hdr.Te->ImageBase);\r
- Hdr.Te->ImageBase = (UINT64) (BaseAddress);\r
+ Adjust = (UINT64) (BaseAddress - Hdr.Te->StrippedSize + sizeof (EFI_TE_IMAGE_HEADER) - Hdr.Te->ImageBase);\r
+ Hdr.Te->ImageBase = (UINT64) (BaseAddress - Hdr.Te->StrippedSize + sizeof (EFI_TE_IMAGE_HEADER));\r
\r
//\r
// Find the relocation block\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
return RETURN_SUCCESS;\r
}\r
\r
\r
case EFI_IMAGE_REL_BASED_HIGHADJ:\r
//\r
- // Not implemented, but not used in EFI 1.0\r
+ // Not implemented, but not used in UEFI 2.0\r
//\r
ASSERT (FALSE);\r
break;\r