1999-09-11 Donn Terry <donn@interix.com>
authorIan Lance Taylor <ian@airs.com>
Sat, 11 Sep 1999 22:41:54 +0000 (22:41 +0000)
committerIan Lance Taylor <ian@airs.com>
Sat, 11 Sep 1999 22:41:54 +0000 (22:41 +0000)
* peicode.h (coff_swap_filehdr_in): Check the NT executable magic
number if COFF_IMAGE_WITH_PE.

bfd/ChangeLog
bfd/peicode.h

index 26ffe3d4798c85699d4d9272c1b3a58ce337ad85..e5f738333e745dc7b6176f11a78c5bb538a26733 100644 (file)
@@ -7,6 +7,9 @@
 
 1999-09-11  Donn Terry  <donn@interix.com>
 
+       * peicode.h (coff_swap_filehdr_in): Check the NT executable magic
+       number if COFF_IMAGE_WITH_PE.
+
        * coffcode.h (coff_mkobject_hook): If COFF_WITH_PE, set HAS_DEBUG
        to the reverse of IMAGE_FILE_DEBUG_STRIPPED.
        (coff_write_object_contents): Set IMAGE_FILE_DEBUG_STRIPPED if
index e7bab8492e17da4855067cd17a94b953709617f9..2a195659388c566e3ec3ea3575d461606e36c4f4 100644 (file)
@@ -295,6 +295,21 @@ coff_swap_filehdr_in (abfd, src, dst)
   filehdr_dst->f_flags = bfd_h_get_16(abfd, (bfd_byte *)filehdr_src-> f_flags);
   filehdr_dst->f_symptr = bfd_h_get_32 (abfd, (bfd_byte *) filehdr_src->f_symptr);
 
+#ifdef COFF_IMAGE_WITH_PE
+  /* There are really two magic numbers involved; the magic number
+     that says this is a NT executable (PEI) and the magic number that
+     determines the architecture.  The former is DOSMAGIC, stored in
+     the e_magic field.  The latter is stored in the f_magic field.
+     If the NT magic number isn't valid, the architecture magic number
+     could be mimicked by some other field (specifically, the number
+     of relocs in section 3).  Since this routine can only be called
+     correctly for a PEI file, check the e_magic number here, and, if
+     it doesn't match, clobber the f_magic number so that we don't get
+     a false match.  */
+  if (bfd_h_get_16 (abfd, (bfd_byte *) filehdr_src->e_magic) != DOSMAGIC)
+    filehdr_dst->f_magic = -1;
+#endif
+
   /* Other people's tools sometimes generate headers with an nsyms but
      a zero symptr.  */
   if (filehdr_dst->f_nsyms != 0 && filehdr_dst->f_symptr == 0)