aboutsummaryrefslogtreecommitdiff
path: root/bfd/peicode.h
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/peicode.h')
-rw-r--r--bfd/peicode.h130
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