summaryrefslogtreecommitdiffstats
path: root/bfd/coff-i386.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>1999-12-17 19:03:09 +0000
committerNick Clifton <nickc@redhat.com>1999-12-17 19:03:09 +0000
commitcb665cd3e27a53bdc921ba8df64d44dfce65291d (patch)
tree1e366ebf64f07b581199e75900fd5845135f90aa /bfd/coff-i386.c
parenteaeaa15ca4218d3486bb5d9a3a27201c55311e56 (diff)
downloadppe42-binutils-cb665cd3e27a53bdc921ba8df64d44dfce65291d.tar.gz
ppe42-binutils-cb665cd3e27a53bdc921ba8df64d44dfce65291d.zip
Move PE format object file detection code into common place.
Diffstat (limited to 'bfd/coff-i386.c')
-rw-r--r--bfd/coff-i386.c67
1 files changed, 2 insertions, 65 deletions
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index a463e58b07..c5afe656f1 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -535,69 +535,6 @@ coff_i386_is_local_label_name (abfd, name)
#include "coffcode.h"
-static const bfd_target *
-i3coff_object_p (abfd)
- bfd *abfd;
-{
-#ifdef COFF_IMAGE_WITH_PE
- /* We need to hack badly to handle a PE image correctly. In PE
- images created by the GNU linker, the offset to the COFF header
- is always the size. However, this is not the case in images
- generated by other PE linkers. The PE format stores a four byte
- offset to the PE signature just before the COFF header at
- location 0x3c of the file. We pick up that offset, verify that
- the PE signature is there, and then set ourselves up to read in
- the COFF header. */
- {
- bfd_byte ext_offset[4];
- file_ptr offset;
- bfd_byte ext_signature[4];
- unsigned long signature;
-
- if (bfd_seek (abfd, 0x3c, SEEK_SET) != 0
- || bfd_read (ext_offset, 1, 4, abfd) != 4)
- {
- if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_wrong_format);
- return NULL;
- }
- offset = bfd_h_get_32 (abfd, ext_offset);
- if (bfd_seek (abfd, offset, SEEK_SET) != 0
- || bfd_read (ext_signature, 1, 4, abfd) != 4)
- {
- if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_wrong_format);
- return NULL;
- }
- signature = bfd_h_get_32 (abfd, ext_signature);
-
- if (signature != 0x4550)
- {
- bfd_set_error (bfd_error_wrong_format);
- return NULL;
- }
-
- /* Here is the hack. coff_object_p wants to read filhsz bytes to
- pick up the COFF header. We adjust so that that will work. 20
- is the size of the i386 COFF filehdr. */
-
- if (bfd_seek (abfd,
- (bfd_tell (abfd)
- - bfd_coff_filhsz (abfd)
- + 20),
- SEEK_SET)
- != 0)
- {
- if (bfd_get_error () != bfd_error_system_call)
- bfd_set_error (bfd_error_wrong_format);
- return NULL;
- }
- }
-#endif
-
- return coff_object_p (abfd);
-}
-
const bfd_target
#ifdef TARGET_SYM
TARGET_SYM =
@@ -640,8 +577,8 @@ const bfd_target
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, i3coff_object_p, /* bfd_check_format */
- bfd_generic_archive_p, i3coff_object_p},
+ {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
+ bfd_generic_archive_p, coff_object_p},
{bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
bfd_false},
{bfd_false, coff_write_object_contents, /* bfd_write_contents */
OpenPOWER on IntegriCloud