]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BasePeCoffLib/BasePeCoff.c
remove unnecessary comments introduced by tools from MdePkg. The regular express...
[mirror_edk2.git] / MdePkg / Library / BasePeCoffLib / BasePeCoff.c
index fb78aefb8cd871720ca355e9e8400acb53a65a70..ea45ff745df2420d305bd3ea9514fe9062e511e4 100644 (file)
@@ -15,9 +15,7 @@
 \r
 **/\r
 \r
-//\r
-// Include common header file for this module.\r
-//\r
+\r
 \r
 \r
 #include "BasePeCoffLibInternals.h"\r
@@ -271,6 +269,8 @@ PeCoffLoaderGetImageInfo (
   //\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
@@ -542,11 +542,8 @@ PeCoffLoaderRelocateImage (
   //\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
@@ -595,8 +592,8 @@ PeCoffLoaderRelocateImage (
     }\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
@@ -709,6 +706,13 @@ PeCoffLoaderRelocateImage (
     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
@@ -1282,7 +1286,7 @@ PeCoffLoaderRelocateImageForRuntime (
 \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