]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix an issue that some image tool will generate PE32+ image with PE32 magic. We now...
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 9 Apr 2007 01:42:09 +0000 (01:42 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 9 Apr 2007 01:42:09 +0000 (01:42 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2547 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/BasePeCoffGetEntryPointLib/PeCoffGetEntryPoint.c

index d0a6746e50969a0371901a1c6c45ba97159d5b6d..ab6029777696e4442e29a4a1e1c244ef773c9683 100644 (file)
@@ -136,6 +136,7 @@ PeCoffLoaderGetPdbPointer (
   VOID                                  *CodeViewEntryPointer;\r
   INTN                                  TEImageAdjust;\r
   UINT32                                NumberOfRvaAndSizes;\r
+  UINT16                                Magic;\r
  \r
   ASSERT (Pe32Data   != NULL);\r
 \r
@@ -166,7 +167,33 @@ PeCoffLoaderGetPdbPointer (
                     TEImageAdjust);\r
     }\r
   } else if (Hdr.Pe32->Signature == EFI_IMAGE_NT_SIGNATURE) {\r
-    if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
+    //\r
+    // NOTE: We use Machine field to identify PE32/PE32+, instead of Magic.\r
+    //       It is due to backward-compatibility, for some system might\r
+    //       generate PE32+ image with PE32 Magic.\r
+    //\r
+    switch (Hdr.Pe32->FileHeader.Machine) {\r
+    case EFI_IMAGE_MACHINE_IA32:\r
+      //\r
+      // Assume PE32 image with IA32 Machine field.\r
+      //\r
+      Magic = EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC;\r
+      break;\r
+    case EFI_IMAGE_MACHINE_X64:\r
+    case EFI_IMAGE_MACHINE_IPF:\r
+      //\r
+      // Assume PE32+ image with X64 or IPF Machine field\r
+      //\r
+      Magic = EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC;\r
+      break;\r
+    default:\r
+      //\r
+      // For unknow Machine field, use Magic in optional Header\r
+      //\r
+      Magic = Hdr.Pe32->OptionalHeader.Magic;\r
+    }\r
+\r
+    if (Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
       //     \r
       // Use PE32 offset get Debug Directory Entry\r
       //\r