Add one judge whether TeImage or PeImage has reloc section when relocate TeImage...
authorlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Fri, 26 Oct 2007 09:28:29 +0000 (09:28 +0000)
committerlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Fri, 26 Oct 2007 09:28:29 +0000 (09:28 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@4224 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/MdeModulePkg/Core/Pei/Image/Image.c
edk2/MdePkg/Library/BasePeCoffLib/BasePeCoff.c

index c9805f5..c38fa56 100644 (file)
@@ -238,6 +238,13 @@ Returns:
     return Status;\r
   }\r
   //\r
+  // When Image has no reloc section, it can't be relocated into memory.\r
+  //\r
+  if (ImageContext.RelocationsStripped) {\r
+    DEBUG ((EFI_D_ERROR, "The image at 0x%08x without reloc section can't be loaded into memory", (UINTN) Pe32Data));\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  //\r
   // Allocate Memory for the image\r
   //\r
   ImageContext.ImageAddress = (EFI_PHYSICAL_ADDRESS)(UINTN) AllocatePages (EFI_SIZE_TO_PAGES ((UINT32) ImageContext.ImageSize));\r
index fb78aef..dbdb5ab 100644 (file)
@@ -271,6 +271,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