diff options
Diffstat (limited to 'bfd/peicode.h')
-rw-r--r-- | bfd/peicode.h | 130 |
1 files changed, 3 insertions, 127 deletions
diff --git a/bfd/peicode.h b/bfd/peicode.h index 357d1c8..2e96f12 100644 --- a/bfd/peicode.h +++ b/bfd/peicode.h @@ -236,8 +236,8 @@ coff_swap_scnhdr_in (bfd * abfd, void * ext, void * in) use the virtual size (stored in s_paddr) instead. */ if (scnhdr_int->s_paddr > 0 && (((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0 - && (! bfd_pe_executable_p (abfd) || scnhdr_int->s_size == 0)) - || (bfd_pe_executable_p (abfd) && (scnhdr_int->s_size > scnhdr_int->s_paddr)))) + && (! bfd_pei_p (abfd) || scnhdr_int->s_size == 0)) + || (bfd_pei_p (abfd) && (scnhdr_int->s_size > scnhdr_int->s_paddr)))) /* This code used to set scnhdr_int->s_paddr to 0. However, coff_set_alignment_hook stores s_paddr in virt_size, which only works if it correctly holds the virtual size of the @@ -1236,25 +1236,6 @@ pe_ILF_object_p (bfd * abfd) return abfd->xvec; } -enum arch_type -{ - arch_type_unknown, - arch_type_i386, - arch_type_x86_64 -}; - -static enum arch_type -pe_arch (const char *arch) -{ - if (strcmp (arch, "i386") == 0 || strcmp (arch, "ia32") == 0) - return arch_type_i386; - - if (strcmp (arch, "x86_64") == 0 || strcmp (arch, "x86-64") == 0) - return arch_type_x86_64; - - return arch_type_unknown; -} - static const bfd_target * pe_bfd_object_p (bfd * abfd) { @@ -1262,8 +1243,6 @@ pe_bfd_object_p (bfd * abfd) struct external_PEI_DOS_hdr dos_hdr; struct external_PEI_IMAGE_hdr image_hdr; file_ptr offset; - const bfd_target *target; - struct bfd_preserve preserve; /* Detect if this a Microsoft Import Library Format element. */ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0 @@ -1328,110 +1307,7 @@ pe_bfd_object_p (bfd * abfd) return NULL; } - preserve.marker = NULL; - if (! bfd_preserve_save (abfd, &preserve)) - return NULL; - - target = coff_object_p (abfd); - if (target) - { - pe_data_type *pe = pe_data (abfd); - struct internal_extra_pe_aouthdr *i = &pe->pe_opthdr; - bfd_boolean efi = i->Subsystem == IMAGE_SUBSYSTEM_EFI_APPLICATION - || i->Subsystem == IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER - || i->Subsystem == IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER; - enum arch_type arch; - const bfd_target * const *target_ptr; - - /* Get the machine. */ - if (bfd_target_efi_app_p (abfd->xvec)) - arch = pe_arch (bfd_target_efi_app_arch (abfd->xvec)); - else if (bfd_target_efi_bsdrv_p (abfd->xvec)) - arch = pe_arch (bfd_target_efi_bsdrv_arch (abfd->xvec)); - else if (bfd_target_efi_rtdrv_p (abfd->xvec)) - arch = pe_arch (bfd_target_efi_rtdrv_arch (abfd->xvec)); - else - arch = pe_arch (bfd_target_pei_arch (abfd->xvec)); - - /* Don't check PE vs. EFI if arch is unknown. */ - if (arch == arch_type_unknown) - { - bfd_preserve_finish (abfd, &preserve); - return target; - } - - for (target_ptr = bfd_target_vector; *target_ptr != NULL; - target_ptr++) - { - if (*target_ptr == target - || (*target_ptr)->flavour != bfd_target_coff_flavour) - continue; - - if (bfd_target_efi_app_p (*target_ptr)) - { - /* Skip incompatible arch. */ - if (pe_arch (bfd_target_efi_app_arch (*target_ptr)) != arch) - continue; - - if (efi) - { - /* TARGET_PTR is an EFI backend. Don't match - TARGET with a EFI file. */ - bfd_set_error (bfd_error_wrong_format); - return NULL; - } - } - else if (bfd_target_efi_bsdrv_p (*target_ptr)) - { - /* Skip incompatible arch. */ - if (pe_arch (bfd_target_efi_bsdrv_arch (*target_ptr)) != arch) - continue; - - if (efi) - { - /* TARGET_PTR is an EFI backend. Don't match - TARGET with a EFI file. */ - bfd_set_error (bfd_error_wrong_format); - return NULL; - } - } - else if (bfd_target_efi_rtdrv_p (*target_ptr)) - { - /* Skip incompatible arch. */ - if (pe_arch (bfd_target_efi_rtdrv_arch (*target_ptr)) != arch) - continue; - - if (efi) - { -no_match: - /* TARGET_PTR is an EFI backend. Don't match - TARGET with a EFI file. */ - bfd_preserve_restore (abfd, &preserve); - bfd_set_error (bfd_error_wrong_format); - return NULL; - } - } - else if (bfd_target_pei_p (*target_ptr)) - { - /* Skip incompatible arch. */ - if (pe_arch (bfd_target_pei_arch (*target_ptr)) != arch) - continue; - - if (!efi) - { - /* TARGET_PTR is a PE backend. Don't match - TARGET with a PE file. */ - goto no_match; - } - } - } - - bfd_preserve_finish (abfd, &preserve); - } - else - bfd_preserve_restore (abfd, &preserve); - - return target; + return coff_object_p (abfd); } #define coff_object_p pe_bfd_object_p |