aboutsummaryrefslogtreecommitdiff
path: root/bfd/coff-stgo32.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-07-20 19:22:30 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-07-20 19:22:30 +0000
commit156f6ad80352423ffa9387e0d0a07d336a984824 (patch)
tree97eafbb442be17c4894ef8178bc0be140ef9ef3f /bfd/coff-stgo32.c
parent1364323a419500dd6b486eb6fc52d5afb83e82e6 (diff)
downloadgdb-156f6ad80352423ffa9387e0d0a07d336a984824.zip
gdb-156f6ad80352423ffa9387e0d0a07d336a984824.tar.gz
gdb-156f6ad80352423ffa9387e0d0a07d336a984824.tar.bz2
bfd/
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.
Diffstat (limited to 'bfd/coff-stgo32.c')
-rw-r--r--bfd/coff-stgo32.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c
index e0038cc..c10194e 100644
--- a/bfd/coff-stgo32.c
+++ b/bfd/coff-stgo32.c
@@ -95,6 +95,10 @@ create_go32_stub PARAMS ((bfd *));
#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 *));
@@ -414,3 +418,23 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd)
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);
+}