diff options
author | Nick Clifton <nickc@redhat.com> | 1999-12-17 19:03:09 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 1999-12-17 19:03:09 +0000 |
commit | cb665cd3e27a53bdc921ba8df64d44dfce65291d (patch) | |
tree | 1e366ebf64f07b581199e75900fd5845135f90aa /bfd/coff-i386.c | |
parent | eaeaa15ca4218d3486bb5d9a3a27201c55311e56 (diff) | |
download | gdb-cb665cd3e27a53bdc921ba8df64d44dfce65291d.zip gdb-cb665cd3e27a53bdc921ba8df64d44dfce65291d.tar.gz gdb-cb665cd3e27a53bdc921ba8df64d44dfce65291d.tar.bz2 |
Move PE format object file detection code into common place.
Diffstat (limited to 'bfd/coff-i386.c')
-rw-r--r-- | bfd/coff-i386.c | 67 |
1 files changed, 2 insertions, 65 deletions
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c index a463e58..c5afe65 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 */ |