Fix false coff-go32-exe matches.
* coff-i386.c (TARGET_SYM) <_bfd_check_format>: Conditionally use
COFF_CHECK_FORMAT.
* coff-stgo32.c (go32_check_format): New forward declaration.
(COFF_CHECK_FORMAT): New defintion.
(go32_check_format): New function.
+2011-07-20 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix false coff-go32-exe matches.
+ * coff-i386.c (TARGET_SYM) <_bfd_check_format>: Conditionally use
+ COFF_CHECK_FORMAT.
+ * coff-stgo32.c (go32_check_format): New forward declaration.
+ (COFF_CHECK_FORMAT): New defintion.
+ (go32_check_format): New function.
+
2011-07-15 Alan Modra <amodra@gmail.com>
* configure.in: Bump version.
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
/* Note that we allow an object file to be treated as a core file as well. */
- {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
- bfd_generic_archive_p, coff_object_p},
+ /* bfd_check_format */
+#ifdef COFF_CHECK_FORMAT
+ {_bfd_dummy_target, COFF_CHECK_FORMAT,
+ bfd_generic_archive_p, COFF_CHECK_FORMAT},
+#else
+ {_bfd_dummy_target, coff_object_p, bfd_generic_archive_p, coff_object_p},
+#endif
{bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
bfd_false},
{bfd_false, coff_write_object_contents, /* bfd_write_contents */
#define COFF_ADJUST_AUX_OUT_PRE adjust_aux_out_pre
#define COFF_ADJUST_AUX_OUT_POST adjust_aux_out_post
+static const bfd_target *go32_check_format (bfd *abfd);
+
+#define COFF_CHECK_FORMAT go32_check_format
+
static bfd_boolean
go32_stubbed_coff_bfd_copy_private_bfd_data PARAMS ((bfd *, bfd *));
return TRUE;
}
+
+/* coff_object_p only checks 2 bytes F_MAGIC at GO32_STUBSIZE inside the file
+ which is too fragile. */
+
+static const bfd_target *
+go32_check_format (bfd *abfd)
+{
+ char mz[2];
+
+ if (bfd_bread (mz, 2, abfd) != 2 || mz[0] != 'M' || mz[1] != 'Z')
+ {
+ bfd_set_error (bfd_error_wrong_format);
+ return NULL;
+ }
+
+ if (bfd_seek (abfd, 0, SEEK_SET) != 0)
+ return NULL;
+
+ return coff_object_p (abfd);
+}