diff options
-rw-r--r-- | bfd/ChangeLog | 78 | ||||
-rw-r--r-- | bfd/Makefile.am | 62 | ||||
-rw-r--r-- | bfd/Makefile.in | 62 | ||||
-rw-r--r-- | bfd/coffcode.h | 4 | ||||
-rw-r--r-- | bfd/config.bfd | 14 | ||||
-rwxr-xr-x | bfd/configure | 10 | ||||
-rw-r--r-- | bfd/configure.in | 10 | ||||
-rw-r--r-- | bfd/efi-app-ia32.c | 36 | ||||
-rw-r--r-- | bfd/efi-app-x86_64.c | 36 | ||||
-rw-r--r-- | bfd/efi-bsdrv-ia32.c | 37 | ||||
-rw-r--r-- | bfd/efi-bsdrv-ia64.c | 38 | ||||
-rw-r--r-- | bfd/efi-bsdrv-x86_64.c | 38 | ||||
-rw-r--r-- | bfd/efi-rtdrv-ia32.c | 37 | ||||
-rw-r--r-- | bfd/efi-rtdrv-ia64.c | 38 | ||||
-rw-r--r-- | bfd/efi-rtdrv-x86_64.c | 38 | ||||
-rw-r--r-- | bfd/libcoff.h | 4 | ||||
-rw-r--r-- | bfd/libpei.h | 40 | ||||
-rw-r--r-- | bfd/peXXigen.c | 4 | ||||
-rw-r--r-- | bfd/pei-ia64.c (renamed from bfd/efi-app-ia64.c) | 9 | ||||
-rw-r--r-- | bfd/peicode.h | 130 | ||||
-rw-r--r-- | bfd/targets.c | 20 | ||||
-rw-r--r-- | binutils/ChangeLog | 36 | ||||
-rw-r--r-- | binutils/NEWS | 4 | ||||
-rw-r--r-- | binutils/doc/binutils.texi | 49 | ||||
-rw-r--r-- | binutils/objcopy.c | 308 |
25 files changed, 510 insertions, 632 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 894c497..8f85d19 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,81 @@ +2009-04-17 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/10074 + * coffcode.h (bfd_pei_p): New. + + * config.bfd: Remove bfd_efi_bsdrv_ia32_vec, + bfd_efi_rtdrv_ia32_vec, bfd_efi_bsdrv_x86_64_vec, + bfd_efi_rtdrv_x86_64_vec, bfd_efi_bsdrv_ia64_vec and + bfd_efi_rtdrv_ia64_vec. Replace bfd_efi_app_ia32_vec, + bfd_efi_app_x86_64_vec and bfd_efi_app_ia64_vec with + i386pei_vec, x86_64pei_vec and bfd_pei_ia64_vec, respectively. + + * configure.in: Remove bfd_efi_bsdrv_ia32_vec, + bfd_efi_rtdrv_ia32_vec, bfd_efi_bsdrv_x86_64_vec, + bfd_efi_rtdrv_x86_64_vec, + bfd_efi_bsdrv_ia64_vec and bfd_efi_rtdrv_ia64_vec. Replace + bfd_efi_ia64_vec with bfd_pei_ia64_vec. + * targets.c: Likewise. + + * configure: Regenerated. + * libcoff.h: Likewise. + * Makefile.in: Likewise. + + * efi-app-ia32.c: Removed. + * efi-app-x86_64.c: Likewise. + * efi-bsdrv-ia32.c: Likewise. + * efi-bsdrv-ia64.c: Likewise. + * efi-bsdrv-x86_64.c: Likewise. + * efi-rtdrv-ia32.c: Likewise. + * efi-rtdrv-ia64.c: Likewise. + * efi-rtdrv-x86_64.c: Likewise. + * efi-rtdrv-ia32.c: Likewise. + + * efi-app-ia64.c: Moved to ... + * pei-ia64.c: This. + (TARGET_SYM): Set to bfd_pei_ia64_vec. + (TARGET_NAME): Set to pei-ia64. + + * libpei.h (bfd_target_pei_p): Removed. + (bfd_target_pei_arch): Likewise. + (bfd_target_efi_app_p): Likewise. + (bfd_target_efi_app_arch): Likewise. + (bfd_target_efi_bsdrv_p): Likewise. + (bfd_target_efi_bsdrv_arch): Likewise. + (bfd_target_efi_rtdrv_p): Likewise. + (bfd_target_efi_rtdrv_arch): Likewise. + (bfd_pe_executable_p): Likewise. + + * Makefile.am (BFD32_BACKENDS): Remove efi-app-ia32.lo, + efi-bsdrv-ia32.lo and efi-rtdrv-ia32.lo. + (BFD32_BACKENDS_CFILES): Remove efi-app-ia32.c, efi-bsdrv-ia32.c + and efi-rtdrv-ia32.c. + (BFD64_BACKENDS): Remove efi-app-ia64.lo, efi-bsdrv-ia64.lo, + efi-rtdrv-ia64.lo, efi-app-x86_64.lo, efi-bsdrv-x86_64.lo and + efi-rtdrv-x86_64.lo. Add pei-ia64.lo. + (BFD64_BACKENDS_CFILES): Remove efi-app-ia64.c, efi-bsdrv-ia64.c, + efi-rtdrv-ia64.c, efi-app-x86_64.c, efi-bsdrv-x86_64.c and + efi-rtdrv-x86_64.c. Add pei-ia64.c. + (efi-app-ia64.lo): Removed. + (efi-bsdrv-ia32.lo): Likewise. + (efi-rtdrv-ia32.lo): Likewise. + (efi-app-ia64.lo): Likewise. + (efi-bsdrv-ia64.lo): Likewise. + (efi-rtdrv-ia64.lo): Likewise. + (efi-app-x86_64.lo): Likewise. + (efi-bsdrv-x86_64.lo): Likewise. + (efi-rtdrv-x86_64.lo): Likewise. + (pei-ia64.lo): New. + + * peicode.h (coff_swap_scnhdr_in): Replace bfd_pe_executable_p + with bfd_pei_p. + (arch_type): Removed. + (pe_arch): Likewise. + (pe_bfd_object_p): Just return coff_object_p. + + * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Replace + bfd_pe_executable_p with bfd_pei_p. + 2009-04-17 Christophe Lyon <christophe.lyon@st.com> * elf32-arm.c (elf32_arm_size_stubs): Handle long branches through diff --git a/bfd/Makefile.am b/bfd/Makefile.am index 683599a..771d555 100644 --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -242,9 +242,6 @@ BFD32_BACKENDS = \ dwarf1.lo \ ecoff.lo \ ecofflink.lo \ - efi-app-ia32.lo \ - efi-bsdrv-ia32.lo \ - efi-rtdrv-ia32.lo \ elf.lo \ elf32-am33lin.lo \ elf32-arc.lo \ @@ -425,9 +422,6 @@ BFD32_BACKENDS_CFILES = \ dwarf1.c \ ecoff.c \ ecofflink.c \ - efi-app-ia32.c \ - efi-bsdrv-ia32.c \ - efi-rtdrv-ia32.c \ elf.c \ elf32-am33lin.c \ elf32-arc.c \ @@ -573,12 +567,7 @@ BFD64_BACKENDS = \ coff-alpha.lo \ coff64-rs6000.lo \ demo64.lo \ - efi-app-ia64.lo \ - efi-bsdrv-ia64.lo \ - efi-rtdrv-ia64.lo \ - efi-app-x86_64.lo \ - efi-bsdrv-x86_64.lo \ - efi-rtdrv-x86_64.lo \ + pei-ia64.lo \ elf64-x86-64.lo \ elf64-alpha.lo \ elf64-hppa.lo \ @@ -610,12 +599,7 @@ BFD64_BACKENDS_CFILES = \ coff-alpha.c \ coff64-rs6000.c \ demo64.c \ - efi-app-ia64.c \ - efi-bsdrv-ia64.c \ - efi-rtdrv-ia64.c \ - efi-app-x86_64.c \ - efi-bsdrv-x86_64.c \ - efi-rtdrv-x86_64.c \ + pei-ia64.c \ elf64-x86-64.c \ elf64-alpha.c \ elf64-hppa.c \ @@ -1346,21 +1330,6 @@ ecofflink.lo: ecofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ $(INCDIR)/aout/stab.def $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ libecoff.h -efi-app-ia32.lo: efi-app-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-bsdrv-ia32.lo: efi-bsdrv-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-rtdrv-ia32.lo: efi-rtdrv-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h elf.lo: elf.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/libiberty.h \ @@ -1909,36 +1878,11 @@ demo64.lo: demo64.c aoutf1.h $(INCDIR)/filenames.h \ $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h libaout.h \ $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \ +pei-ia64.lo: pei-ia64.c $(INCDIR)/filenames.h \ coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ peicode.h libpei.h -efi-bsdrv-ia64.lo: efi-bsdrv-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-rtdrv-ia64.lo: efi-rtdrv-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-app-x86_64.lo: efi-app-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h -efi-bsdrv-x86_64.lo: efi-bsdrv-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h -efi-rtdrv-x86_64.lo: efi-rtdrv-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h bfd_stdint.h \ diff --git a/bfd/Makefile.in b/bfd/Makefile.in index 24c8ee1..1a00c47 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -509,9 +509,6 @@ BFD32_BACKENDS = \ dwarf1.lo \ ecoff.lo \ ecofflink.lo \ - efi-app-ia32.lo \ - efi-bsdrv-ia32.lo \ - efi-rtdrv-ia32.lo \ elf.lo \ elf32-am33lin.lo \ elf32-arc.lo \ @@ -692,9 +689,6 @@ BFD32_BACKENDS_CFILES = \ dwarf1.c \ ecoff.c \ ecofflink.c \ - efi-app-ia32.c \ - efi-bsdrv-ia32.c \ - efi-rtdrv-ia32.c \ elf.c \ elf32-am33lin.c \ elf32-arc.c \ @@ -841,12 +835,7 @@ BFD64_BACKENDS = \ coff-alpha.lo \ coff64-rs6000.lo \ demo64.lo \ - efi-app-ia64.lo \ - efi-bsdrv-ia64.lo \ - efi-rtdrv-ia64.lo \ - efi-app-x86_64.lo \ - efi-bsdrv-x86_64.lo \ - efi-rtdrv-x86_64.lo \ + pei-ia64.lo \ elf64-x86-64.lo \ elf64-alpha.lo \ elf64-hppa.lo \ @@ -878,12 +867,7 @@ BFD64_BACKENDS_CFILES = \ coff-alpha.c \ coff64-rs6000.c \ demo64.c \ - efi-app-ia64.c \ - efi-bsdrv-ia64.c \ - efi-rtdrv-ia64.c \ - efi-app-x86_64.c \ - efi-bsdrv-x86_64.c \ - efi-rtdrv-x86_64.c \ + pei-ia64.c \ elf64-x86-64.c \ elf64-alpha.c \ elf64-hppa.c \ @@ -1943,21 +1927,6 @@ ecofflink.lo: ecofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ $(INCDIR)/aout/stab.def $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ libecoff.h -efi-app-ia32.lo: efi-app-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-bsdrv-ia32.lo: efi-bsdrv-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-rtdrv-ia32.lo: efi-rtdrv-ia32.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h elf.lo: elf.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h $(INCDIR)/libiberty.h \ @@ -2506,36 +2475,11 @@ demo64.lo: demo64.c aoutf1.h $(INCDIR)/filenames.h \ $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h libaout.h \ $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \ +pei-ia64.lo: pei-ia64.c $(INCDIR)/filenames.h \ coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ peicode.h libpei.h -efi-bsdrv-ia64.lo: efi-bsdrv-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-rtdrv-ia64.lo: efi-rtdrv-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -efi-app-x86_64.lo: efi-app-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h -efi-bsdrv-x86_64.lo: efi-bsdrv-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h -efi-rtdrv-x86_64.lo: efi-rtdrv-x86_64.c $(INCDIR)/filenames.h \ - coff-x86_64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/x86_64.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h peicode.h libpei.h elf64-x86-64.lo: elf64-x86-64.c $(INCDIR)/filenames.h \ $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ $(INCDIR)/elf/external.h $(INCDIR)/elf/internal.h bfd_stdint.h \ diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 11cc457..312aa77 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -1560,6 +1560,10 @@ Special entry points for gdb to swap in coff symbol table parts: .#define bfd_coff_print_pdata(a,p) \ . ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) . +.{* Macro: Returns true if the bfd is a PE executable as opposed to a +. PE object file. *} +.#define bfd_pei_p(abfd) \ +. (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) */ /* See whether the magic number matches. */ diff --git a/bfd/config.bfd b/bfd/config.bfd index 9e9e021..56894ad 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -179,7 +179,7 @@ case "${targ}" in ;; ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_ia64_little_vec - targ_selvecs="bfd_elf64_ia64_big_vec bfd_efi_app_ia64_vec bfd_efi_bsdrv_ia64_vec bfd_efi_rtdrv_ia64_vec" + targ_selvecs="bfd_elf64_ia64_big_vec bfd_pei_ia64_vec" want64=true ;; ia64*-*-hpux*) @@ -556,8 +556,8 @@ case "${targ}" in ;; i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu | i[3-7]86-*-dragonfly*) targ_defvec=bfd_elf32_i386_freebsd_vec - targ_selvecs="bfd_elf32_i386_vec bfd_efi_app_ia32_vec bfd_efi_bsdrv_ia32_vec bfd_efi_rtdrv_ia32_vec i386coff_vec" - targ64_selvecs="bfd_elf64_x86_64_freebsd_vec bfd_elf64_x86_64_vec bfd_efi_app_x86_64_vec bfd_efi_bsdrv_x86_64_vec bfd_efi_rtdrv_x86_64_vec" + targ_selvecs="bfd_elf32_i386_vec i386pei_vec i386coff_vec" + targ64_selvecs="bfd_elf64_x86_64_freebsd_vec bfd_elf64_x86_64_vec x86_64pei_vec" # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling. case "${targ}" in i[3-7]86-*-freebsd3* | i[3-7]86-*-freebsd4 | i[3-7]86-*-freebsd4.0*) @@ -594,7 +594,7 @@ case "${targ}" in ;; i[3-7]86-*-linux-*) targ_defvec=bfd_elf32_i386_vec - targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec bfd_efi_bsdrv_ia32_vec bfd_efi_rtdrv_ia32_vec" + targ_selvecs="i386linux_vec i386pei_vec" targ64_selvecs=bfd_elf64_x86_64_vec ;; #ifdef BFD64 @@ -616,17 +616,17 @@ case "${targ}" in ;; x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_x86_64_freebsd_vec - targ_selvecs="bfd_elf32_i386_freebsd_vec i386coff_vec bfd_efi_app_ia32_vec bfd_efi_bsdrv_ia32_vec bfd_efi_rtdrv_ia32_vec bfd_efi_app_x86_64_vec bfd_efi_bsdrv_x86_64_vec bfd_efi_rtdrv_x86_64_vec bfd_elf32_i386_vec bfd_elf64_x86_64_vec" + targ_selvecs="bfd_elf32_i386_freebsd_vec i386coff_vec i386pei_vec x86_64pei_vec bfd_elf32_i386_vec bfd_elf64_x86_64_vec" want64=true ;; x86_64-*-netbsd* | x86_64-*-openbsd*) targ_defvec=bfd_elf64_x86_64_vec - targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec bfd_efi_app_ia32_vec bfd_efi_bsdrv_ia32_vec bfd_efi_rtdrv_ia32_vec bfd_efi_app_x86_64_vec bfd_efi_bsdrv_x86_64_vec bfd_efi_rtdrv_x86_64_vec" + targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec i386pei_vec x86_64pei_vec" want64=true ;; x86_64-*-linux-*) targ_defvec=bfd_elf64_x86_64_vec - targ_selvecs="bfd_elf32_i386_vec i386linux_vec bfd_efi_app_ia32_vec bfd_efi_bsdrv_ia32_vec bfd_efi_rtdrv_ia32_vec bfd_efi_app_x86_64_vec bfd_efi_bsdrv_x86_64_vec bfd_efi_rtdrv_x86_64_vec" + targ_selvecs="bfd_elf32_i386_vec i386linux_vec i386pei_vec x86_64pei_vec" want64=true ;; x86_64-*-mingw*) diff --git a/bfd/configure b/bfd/configure index 41520b2..3f7c69c 100755 --- a/bfd/configure +++ b/bfd/configure @@ -20936,15 +20936,7 @@ do armpei_little_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;; b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;; b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;; - bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_bsdrv_ia32_vec) tb="$tb efi-bsdrv-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_rtdrv_ia32_vec) tb="$tb efi-rtdrv-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_app_x86_64_vec) tb="$tb efi-app-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_bsdrv_x86_64_vec) tb="$tb efi-bsdrv-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_rtdrv_x86_64_vec) tb="$tb efi-rtdrv-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; - bfd_efi_bsdrv_ia64_vec) tb="$tb efi-bsdrv-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; - bfd_efi_rtdrv_ia64_vec) tb="$tb efi-rtdrv-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; + bfd_pei_ia64_vec) tb="$tb pei-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; diff --git a/bfd/configure.in b/bfd/configure.in index 868730a..81255dd 100644 --- a/bfd/configure.in +++ b/bfd/configure.in @@ -657,15 +657,7 @@ do armpei_little_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;; b_out_vec_big_host) tb="$tb bout.lo aout32.lo" ;; b_out_vec_little_host) tb="$tb bout.lo aout32.lo" ;; - bfd_efi_app_ia32_vec) tb="$tb efi-app-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_bsdrv_ia32_vec) tb="$tb efi-bsdrv-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_rtdrv_ia32_vec) tb="$tb efi-rtdrv-ia32.lo peigen.lo cofflink.lo" ;; - bfd_efi_app_x86_64_vec) tb="$tb efi-app-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_bsdrv_x86_64_vec) tb="$tb efi-bsdrv-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_rtdrv_x86_64_vec) tb="$tb efi-rtdrv-x86_64.lo pex64igen.lo cofflink.lo" ;target_size=64;; - bfd_efi_app_ia64_vec) tb="$tb efi-app-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; - bfd_efi_bsdrv_ia64_vec) tb="$tb efi-bsdrv-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; - bfd_efi_rtdrv_ia64_vec) tb="$tb efi-rtdrv-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; + bfd_pei_ia64_vec) tb="$tb pei-ia64.lo pepigen.lo cofflink.lo"; target_size=64 ;; bfd_elf32_am33lin_vec) tb="$tb elf32-am33lin.lo elf32.lo $elf" ;; bfd_elf32_avr_vec) tb="$tb elf32-avr.lo elf32.lo $elf" ;; bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; diff --git a/bfd/efi-app-ia32.c b/bfd/efi-app-ia32.c deleted file mode 100644 index aaa80c5..0000000 --- a/bfd/efi-app-ia32.c +++ /dev/null @@ -1,36 +0,0 @@ -/* BFD back-end for Intel IA-32 EFI application files. - Copyright 1999, 2000, 2001, 2002, 2007, 2009 Free Software Foundation, Inc. - Contributed by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_app_ia32_vec -#define TARGET_NAME "efi-app-ia32" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_APPLICATION -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-i386.c" diff --git a/bfd/efi-app-x86_64.c b/bfd/efi-app-x86_64.c deleted file mode 100644 index d2a04f3..0000000 --- a/bfd/efi-app-x86_64.c +++ /dev/null @@ -1,36 +0,0 @@ -/* BFD back-end for Intel64 UEFI application files. - Copyright 2007, 2009 Free Software Foundation, Inc. - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_app_x86_64_vec -#define TARGET_NAME "efi-app-x86_64" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define COFF_WITH_pep -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_APPLICATION -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-x86_64.c" diff --git a/bfd/efi-bsdrv-ia32.c b/bfd/efi-bsdrv-ia32.c deleted file mode 100644 index 112b2b4..0000000 --- a/bfd/efi-bsdrv-ia32.c +++ /dev/null @@ -1,37 +0,0 @@ -/* BFD back-end for Intel IA-32 EFI Boot Service driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-ia32.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_bsdrv_ia32_vec -#define TARGET_NAME "efi-bsdrv-ia32" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-i386.c" diff --git a/bfd/efi-bsdrv-ia64.c b/bfd/efi-bsdrv-ia64.c deleted file mode 100644 index f08c568..0000000 --- a/bfd/efi-bsdrv-ia64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* BFD back-end for HP/Intel IA-64 EFI Boot Service driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-ia64.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_bsdrv_ia64_vec -#define TARGET_NAME "efi-bsdrv-ia64" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define COFF_WITH_pep -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-ia64.c" diff --git a/bfd/efi-bsdrv-x86_64.c b/bfd/efi-bsdrv-x86_64.c deleted file mode 100644 index dfe00f4..0000000 --- a/bfd/efi-bsdrv-x86_64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* BFD back-end for Intel64 UEFI Boot Service driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-x86_64.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_bsdrv_x86_64_vec -#define TARGET_NAME "efi-bsdrv-x86_64" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define COFF_WITH_pep -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-x86_64.c" diff --git a/bfd/efi-rtdrv-ia32.c b/bfd/efi-rtdrv-ia32.c deleted file mode 100644 index b127cbc..0000000 --- a/bfd/efi-rtdrv-ia32.c +++ /dev/null @@ -1,37 +0,0 @@ -/* BFD back-end for Intel IA-32 EFI runtime driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-ia32.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_rtdrv_ia32_vec -#define TARGET_NAME "efi-rtdrv-ia32" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-i386.c" diff --git a/bfd/efi-rtdrv-ia64.c b/bfd/efi-rtdrv-ia64.c deleted file mode 100644 index d93416d..0000000 --- a/bfd/efi-rtdrv-ia64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* BFD back-end for HP/Intel IA-64 EFI runtime driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-ia64.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_rtdrv_ia64_vec -#define TARGET_NAME "efi-rtdrv-ia64" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define COFF_WITH_pep -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-ia64.c" diff --git a/bfd/efi-rtdrv-x86_64.c b/bfd/efi-rtdrv-x86_64.c deleted file mode 100644 index c66b63c..0000000 --- a/bfd/efi-rtdrv-x86_64.c +++ /dev/null @@ -1,38 +0,0 @@ -/* BFD back-end for Intel64 UEFI runtime driver files. - Copyright 1999, 2000, 2001, 2002, 2007, 2008, 2009 Free Software Foundation, Inc. - Contributed by Peter Jones <pjones@redhat.com> - Based on efi-app-x86_64.c by David Mosberger <davidm@hpl.hp.com> - - This file is part of BFD, the Binary File Descriptor library. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, - MA 02110-1301, USA. */ - -#include "sysdep.h" -#include "bfd.h" - -#define TARGET_SYM bfd_efi_rtdrv_x86_64_vec -#define TARGET_NAME "efi-rtdrv-x86_64" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#define COFF_WITH_pep -#define PCRELOFFSET TRUE -#define TARGET_UNDERSCORE '_' -/* Long section names not allowed in executable images, only object files. */ -#define COFF_LONG_SECTION_NAMES 0 -#define PEI_TARGET_SUBSYSTEM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER -#define PEI_FORCE_MINIMUM_ALIGNMENT - -#include "coff-x86_64.c" diff --git a/bfd/libcoff.h b/bfd/libcoff.h index a053f6b..247f1c4 100644 --- a/bfd/libcoff.h +++ b/bfd/libcoff.h @@ -950,3 +950,7 @@ typedef struct #define bfd_coff_print_pdata(a,p) \ ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) +/* Macro: Returns true if the bfd is a PE executable as opposed to a + PE object file. */ +#define bfd_pei_p(abfd) \ + (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) diff --git a/bfd/libpei.h b/bfd/libpei.h index 2178d24..f5bfa4c 100644 --- a/bfd/libpei.h +++ b/bfd/libpei.h @@ -301,46 +301,6 @@ #endif /* !COFF_WITH_pep */ -/* Returns true if the target is a PE executable target. */ -#define bfd_target_pei_p(xvec) \ - (CONST_STRNEQ ((xvec)->name, "pei-")) - -/* Return the arch string of a PE executable target. */ -#define bfd_target_pei_arch(xvec) \ - ((xvec)->name + sizeof ("pei-") - 1) - -/* Returns true if the target is an EFI application target. */ -#define bfd_target_efi_app_p(xvec) \ - (CONST_STRNEQ ((xvec)->name, "efi-app-")) - -/* Return the arch string of an EFI application target. */ -#define bfd_target_efi_app_arch(xvec) \ - ((xvec)->name + sizeof ("efi-app-") - 1) - -/* Returns true if the target is an EFI Boot Service driver target. */ -#define bfd_target_efi_bsdrv_p(xvec) \ - (CONST_STRNEQ ((xvec)->name, "efi-bsdrv-")) - -/* Return the arch string of an EFI Boot Service driver target. */ -#define bfd_target_efi_bsdrv_arch(xvec) \ - ((xvec)->name + sizeof ("efi-bsdrv-") - 1) - -/* Returns true if the target is an EFI runtime driver target. */ -#define bfd_target_efi_rtdrv_p(xvec) \ - (CONST_STRNEQ ((xvec)->name, "efi-rtdrv-")) - -/* Return the arch string of an EFI runtime driver target. */ -#define bfd_target_efi_rtdrv_arch(xvec) \ - ((xvec)->name + sizeof ("efi-rtdrv-") - 1) - -/* Macro: Returns true if the bfd is a PE executable as opposed to a - PE object file. */ -#define bfd_pe_executable_p(abfd) \ - ( bfd_target_pei_p ((abfd)->xvec) \ - || bfd_target_efi_app_p ((abfd)->xvec) \ - || bfd_target_efi_bsdrv_p ((abfd)->xvec) \ - || bfd_target_efi_rtdrv_p ((abfd)->xvec)) - /* These functions are architecture dependent, and are in peicode.h: coff_swap_reloc_in int coff_swap_reloc_out diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 246de27..b3b39de 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -879,7 +879,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) sometimes). */ if ((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0) { - if (bfd_pe_executable_p (abfd)) + if (bfd_pei_p (abfd)) { ps = scnhdr_int->s_size; ss = 0; @@ -892,7 +892,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) } else { - if (bfd_pe_executable_p (abfd)) + if (bfd_pei_p (abfd)) ps = scnhdr_int->s_paddr; else ps = 0; diff --git a/bfd/efi-app-ia64.c b/bfd/pei-ia64.c index 449c4c7..dc1980d 100644 --- a/bfd/efi-app-ia64.c +++ b/bfd/pei-ia64.c @@ -1,7 +1,10 @@ -/* BFD back-end for HP/Intel IA-64 EFI application files. +/* BFD back-end for HP/Intel IA-64 PE IMAGE COFF files. Copyright 1999, 2000, 2001, 2002, 2007, 2009 Free Software Foundation, Inc. Contributed by David Mosberger <davidm@hpl.hp.com> + This implementation only supports objcopy to ouput IA-64 PE IMAGE COFF + files. + This file is part of BFD, the Binary File Descriptor library. This program is free software; you can redistribute it and/or modify @@ -22,8 +25,8 @@ #include "sysdep.h" #include "bfd.h" -#define TARGET_SYM bfd_efi_app_ia64_vec -#define TARGET_NAME "efi-app-ia64" +#define TARGET_SYM bfd_pei_ia64_vec +#define TARGET_NAME "pei-ia64" #define COFF_IMAGE_WITH_PE #define COFF_WITH_PE #define COFF_WITH_pep 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 diff --git a/bfd/targets.c b/bfd/targets.c index c9d4c31..daca615 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -565,15 +565,7 @@ extern const bfd_target armpei_big_vec; extern const bfd_target armpei_little_vec; extern const bfd_target b_out_vec_big_host; extern const bfd_target b_out_vec_little_host; -extern const bfd_target bfd_efi_app_ia32_vec; -extern const bfd_target bfd_efi_bsdrv_ia32_vec; -extern const bfd_target bfd_efi_rtdrv_ia32_vec; -extern const bfd_target bfd_efi_app_x86_64_vec; -extern const bfd_target bfd_efi_bsdrv_x86_64_vec; -extern const bfd_target bfd_efi_rtdrv_x86_64_vec; -extern const bfd_target bfd_efi_app_ia64_vec; -extern const bfd_target bfd_efi_bsdrv_ia64_vec; -extern const bfd_target bfd_efi_rtdrv_ia64_vec; +extern const bfd_target bfd_pei_ia64_vec; extern const bfd_target bfd_elf32_avr_vec; extern const bfd_target bfd_elf32_bfin_vec; extern const bfd_target bfd_elf32_bfinfdpic_vec; @@ -893,16 +885,8 @@ static const bfd_target * const _bfd_target_vector[] = &armpei_little_vec, &b_out_vec_big_host, &b_out_vec_little_host, - &bfd_efi_app_ia32_vec, - &bfd_efi_bsdrv_ia32_vec, - &bfd_efi_rtdrv_ia32_vec, #ifdef BFD64 - &bfd_efi_app_x86_64_vec, - &bfd_efi_bsdrv_x86_64_vec, - &bfd_efi_rtdrv_x86_64_vec, - &bfd_efi_app_ia64_vec, - &bfd_efi_bsdrv_ia64_vec, - &bfd_efi_rtdrv_ia64_vec, + &bfd_pei_ia64_vec, #endif &bfd_elf32_avr_vec, &bfd_elf32_bfin_vec, diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 4f755b9..5032687 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,39 @@ +2009-04-17 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/10074 + * objcopy.c: Include coff/i386.h and coff/pe.h. + (pe_file_alignment): New. + (pe_heap_commit): Likewise. + (pe_heap_reserve): Likewise. + (pe_image_base): Likewise. + (pe_section_alignment): Likewise. + (pe_stack_commit): Likewise. + (pe_stack_reserve): Likewise. + (pe_subsystem): Likewise. + (pe_major_subsystem_version): Likewise. + (pe_minor_subsystem_version): Likewise. + (set_pe_subsystem): Likewise. + (convert_efi_target): Likewise. + (command_line_switch): Add OPTION_FILE_ALIGNMENT, + OPTION_HEAP, OPTION_IMAGE_BASE, OPTION_SECTION_ALIGNMENT, + OPTION_STACK and OPTION_SUBSYSTEM. + (copy_options): Likewise. + (copy_usage): Add --file-alignment, --heap, --image-base, + --section-alignment, --stack and --subsystem. + (copy_object): Set up PE parameters. + (copy_main): Process Add OPTION_FILE_ALIGNMENT, + OPTION_HEAP, OPTION_IMAGE_BASE, OPTION_SECTION_ALIGNMENT, + OPTION_STACK and OPTION_SUBSYSTEM. Convert EFI target to + PEI target. + + * NEWS: Mention --file-alignment, --heap, --image-base, + --section-alignment, --stack and --subsystem command line + options for objcopy. + + * doc/binutils.texi: Document --file-alignment, --heap, + --image-base, --section-alignment, --stack and --subsystem + command line options for objcopy. + 2009-04-15 Anthony Green <green@moxielogic.com> * MAINTAINERS: Add myself and Moxie port maintainer. diff --git a/binutils/NEWS b/binutils/NEWS index b4d562c..3434b9f 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -1,5 +1,9 @@ -*- text -*- +* Add --file-alignment, --heap, --image-base, --section-alignment, + --stack and --subsystem command line options to objcopy, which will + set PE optional header. + * Option --dwarf/-W of objdump is now as flexible as readelf --debug-dump/-w. * --as-needed now links in a dynamic library if it satisfies undefined diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 55d14d0..fe30d6a 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -1027,6 +1027,12 @@ objcopy [@option{-F} @var{bfdname}|@option{--target=}@var{bfdname}] [@option{--readonly-text}] [@option{--pure}] [@option{--impure}] + [@option{--file-alignment=}@var{num}] + [@option{--heap=}@var{size}] + [@option{--image-base=}@var{address}] + [@option{--section-alignment=}@var{num}] + [@option{--stack=}@var{size}] + [@option{--subsystem=}@var{which}:@var{major}.@var{minor}] [@option{-v}|@option{--verbose}] [@option{-V}|@option{--version}] [@option{--help}] [@option{--info}] @@ -1520,6 +1526,49 @@ distribution and the second a debugging information file which is only needed if debugging abilities are required. The suggested procedure to create these files is as follows: +@item --file-alignment @var{num} +Specify the file alignment. Sections in the file will always begin at +file offsets which are multiples of this number. This defaults to +512. +[This option is specific to PE targets.] + +@item --heap @var{reserve} +@itemx --heap @var{reserve},@var{commit} +Specify the number of bytes of memory to reserve (and optionally commit) +to be used as heap for this program. +[This option is specific to PE targets.] + +@item --image-base @var{value} +Use @var{value} as the base address of your program or dll. This is +the lowest memory location that will be used when your program or dll +is loaded. To reduce the need to relocate and improve performance of +your dlls, each should have a unique base address and not overlap any +other dlls. The default is 0x400000 for executables, and 0x10000000 +for dlls. +[This option is specific to PE targets.] + +@item --section-alignment @var{num} +Sets the section alignment. Sections in memory will always begin at +addresses which are a multiple of this number. Defaults to 0x1000. +[This option is specific to PE targets.] + +@item --stack @var{reserve} +@itemx --stack @var{reserve},@var{commit} +Specify the number of bytes of memory to reserve (and optionally commit) +to be used as stack for this program. +[This option is specific to PE targets.] + +@item --subsystem @var{which} +@itemx --subsystem @var{which}:@var{major} +@itemx --subsystem @var{which}:@var{major}.@var{minor} +Specifies the subsystem under which your program will execute. The +legal values for @var{which} are @code{native}, @code{windows}, +@code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd}, +@code{efi-rtd}, @code{efi-rom}, and @code{xbox}. You may optionally set +the subsystem version also. Numeric values are also accepted for +@var{which}. +[This option is specific to PE targets.] + @enumerate @item Link the executable as normal. Assuming that is is called @code{foo} then... diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 02e4d35..b7c84d8 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -35,6 +35,22 @@ #include "coff/internal.h" #include "libcoff.h" +/* FIXME: See bfd/peXXigen.c for why we include an architecture specific + header in generic PE code. */ +#include "coff/i386.h" +#include "coff/pe.h" + +static bfd_vma pe_file_alignment = (bfd_vma) -1; +static bfd_vma pe_heap_commit = (bfd_vma) -1; +static bfd_vma pe_heap_reserve = (bfd_vma) -1; +static bfd_vma pe_image_base = (bfd_vma) -1; +static bfd_vma pe_section_alignment = (bfd_vma) -1; +static bfd_vma pe_stack_commit = (bfd_vma) -1; +static bfd_vma pe_stack_reserve = (bfd_vma) -1; +static short pe_subsystem = -1; +static short pe_major_subsystem_version = -1; +static short pe_minor_subsystem_version = -1; + struct is_specified_symbol_predicate_data { const char *name; @@ -280,7 +296,13 @@ enum command_line_switch OPTION_PURE, OPTION_IMPURE, OPTION_EXTRACT_SYMBOL, - OPTION_REVERSE_BYTES + OPTION_REVERSE_BYTES, + OPTION_FILE_ALIGNMENT, + OPTION_HEAP, + OPTION_IMAGE_BASE, + OPTION_SECTION_ALIGNMENT, + OPTION_STACK, + OPTION_SUBSYSTEM }; /* Options to handle if running as "strip". */ @@ -394,6 +416,12 @@ static struct option copy_options[] = {"weaken-symbols", required_argument, 0, OPTION_WEAKEN_SYMBOLS}, {"wildcard", no_argument, 0, 'w'}, {"writable-text", no_argument, 0, OPTION_WRITABLE_TEXT}, + {"file-alignment", required_argument, 0, OPTION_FILE_ALIGNMENT}, + {"heap", required_argument, 0, OPTION_HEAP}, + {"image-base", required_argument, 0 , OPTION_IMAGE_BASE}, + {"section-alignment", required_argument, 0, OPTION_SECTION_ALIGNMENT}, + {"stack", required_argument, 0, OPTION_STACK}, + {"subsystem", required_argument, 0, OPTION_SUBSYSTEM}, {0, no_argument, 0, 0} }; @@ -515,6 +543,15 @@ copy_usage (FILE *stream, int exit_status) --prefix-alloc-sections <prefix>\n\ Add <prefix> to start of every allocatable\n\ section name\n\ + --file-alignment <num> Set PE file alignment to <num>\n\ + --heap <reserve>[,<commit>] Set PE reserve/commit heap to <reserve>/\n\ + <commit>\n\ + --image-base <address> Set PE image base to <address>\n\ + --section-alignment <num> Set PE section alignment to <num>\n\ + --stack <reserve>[,<commit>] Set PE reserve/commit stack to <reserve>/\n\ + <commit>\n\ + --subsystem <name>[:<version>]\n\ + Set PE subsystem to <name> [& <version>]\n]\ -v --verbose List all object files modified\n\ @<file> Read options from <file>\n\ -V --version Display this program's version number\n\ @@ -1448,6 +1485,58 @@ copy_object (bfd *ibfd, bfd *obfd) return FALSE; } + if (bfd_get_flavour (obfd) == bfd_target_coff_flavour + && bfd_pei_p (obfd)) + { + /* Set up PE parameters. */ + pe_data_type *pe = pe_data (obfd); + + if (pe_file_alignment != (bfd_vma) -1) + pe->pe_opthdr.FileAlignment = pe_file_alignment; + else + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + + if (pe_heap_commit != (bfd_vma) -1) + pe->pe_opthdr.SizeOfHeapCommit = pe_heap_commit; + + if (pe_heap_reserve != (bfd_vma) -1) + pe->pe_opthdr.SizeOfHeapCommit = pe_heap_reserve; + + if (pe_image_base != (bfd_vma) -1) + pe->pe_opthdr.ImageBase = pe_image_base; + + if (pe_section_alignment != (bfd_vma) -1) + pe->pe_opthdr.SectionAlignment = pe_section_alignment; + else + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + + if (pe_stack_commit != (bfd_vma) -1) + pe->pe_opthdr.SizeOfStackCommit = pe_stack_commit; + + if (pe_stack_reserve != (bfd_vma) -1) + pe->pe_opthdr.SizeOfStackCommit = pe_stack_reserve; + + if (pe_subsystem != -1) + pe->pe_opthdr.Subsystem = pe_subsystem; + + if (pe_major_subsystem_version != -1) + pe->pe_opthdr.MajorSubsystemVersion = pe_major_subsystem_version; + + if (pe_minor_subsystem_version != -1) + pe->pe_opthdr.MinorSubsystemVersion = pe_minor_subsystem_version; + + if (pe_file_alignment > pe_section_alignment) + { + char file_alignment[20], section_alignment[20]; + + sprintf_vma (file_alignment, pe_file_alignment); + sprintf_vma (section_alignment, pe_section_alignment); + non_fatal (_("warning: file alignment (0x%s) > section alignment (0x%s)"), + + file_alignment, section_alignment); + } + } + if (isympp) free (isympp); @@ -2928,6 +3017,117 @@ strip_main (int argc, char *argv[]) return status; } +/* Set up PE subsystem. */ + +static void +set_pe_subsystem (const char *s) +{ + const char *version, *subsystem; + size_t i; + static const struct + { + const char *name; + const char set_def; + const short value; + } + v[] = + { + { "native", 0, IMAGE_SUBSYSTEM_NATIVE }, + { "windows", 0, IMAGE_SUBSYSTEM_WINDOWS_GUI }, + { "console", 0, IMAGE_SUBSYSTEM_WINDOWS_CUI }, + { "posix", 0, IMAGE_SUBSYSTEM_POSIX_CUI }, + { "wince", 0, IMAGE_SUBSYSTEM_WINDOWS_CE_GUI }, + { "efi-app", 1, IMAGE_SUBSYSTEM_EFI_APPLICATION }, + { "efi-bsd", 1, IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER }, + { "efi-rtd", 1, IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER }, + { "efi-rom", 1, IMAGE_SUBSYSTEM_EFI_ROM }, + { "xbox", 0, IMAGE_SUBSYSTEM_XBOX } + }; + short value; + char *copy; + int set_def = -1; + + /* Check for the presence of a version number. */ + version = strchr (s, ':'); + if (version == NULL) + subsystem = s; + else + { + int len = version - s; + copy = xstrdup (s); + subsystem = copy; + copy[len] = '\0'; + version = copy + 1 + len; + pe_major_subsystem_version = strtoul (version, ©, 0); + if (*copy == '.') + pe_minor_subsystem_version = strtoul (copy + 1, ©, 0); + if (*copy != '\0') + non_fatal (_("%s: bad version in PE subsystem"), s); + } + + /* Check for numeric subsystem. */ + value = (short) strtol (subsystem, ©, 0); + if (*copy == '\0') + { + for (i = 0; i < ARRAY_SIZE (v); i++) + if (v[i].value == value) + { + pe_subsystem = value; + set_def = v[i].set_def; + break; + } + } + else + { + /* Search for subsystem by name. */ + for (i = 0; i < ARRAY_SIZE (v); i++) + if (strcmp (subsystem, v[i].name) == 0) + { + pe_subsystem = v[i].value; + set_def = v[i].set_def; + break; + } + } + + switch (set_def) + { + case -1: + fatal (_("unknown PE subsystem: %s"), s); + break; + case 0: + break; + default: + if (pe_file_alignment == (bfd_vma) -1) + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + if (pe_section_alignment == (bfd_vma) -1) + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + break; + } +} + +/* Convert EFI target to PEI target. */ + +static void +convert_efi_target (char *efi) +{ + efi[0] = 'p'; + efi[1] = 'e'; + efi[2] = 'i'; + + if (strcmp (efi + 4, "ia32") == 0) + { + /* Change ia32 to i386. */ + efi[5]= '3'; + efi[6]= '8'; + efi[7]= '6'; + } + else if (strcmp (efi + 4, "x86_64") == 0) + { + /* Change x86_64 to x86-64. */ + efi[7] = '-'; + } +} + static int copy_main (int argc, char *argv[]) { @@ -3466,6 +3666,59 @@ copy_main (int argc, char *argv[]) break; } + case OPTION_FILE_ALIGNMENT: + pe_file_alignment = parse_vma (optarg, "--file-alignment"); + break; + + case OPTION_HEAP: + { + char *end; + pe_heap_reserve = strtoul (optarg, &end, 0); + if (end == optarg + || (*end != '.' && *end != '\0')) + non_fatal (_("%s: invalid reserve value for --heap"), + optarg); + else if (*end != '\0') + { + pe_heap_commit = strtoul (end + 1, &end, 0); + if (*end != '\0') + non_fatal (_("%s: invalid commit value for --heap"), + optarg); + } + } + break; + + case OPTION_IMAGE_BASE: + pe_image_base = parse_vma (optarg, "--image-base"); + break; + + case OPTION_SECTION_ALIGNMENT: + pe_section_alignment = parse_vma (optarg, + "--section-alignment"); + break; + + case OPTION_SUBSYSTEM: + set_pe_subsystem (optarg); + break; + + case OPTION_STACK: + { + char *end; + pe_stack_reserve = strtoul (optarg, &end, 0); + if (end == optarg + || (*end != '.' && *end != '\0')) + non_fatal (_("%s: invalid reserve value for --stack"), + optarg); + else if (*end != '\0') + { + pe_stack_commit = strtoul (end + 1, &end, 0); + if (*end != '\0') + non_fatal (_("%s: invalid commit value for --stack"), + optarg); + } + } + break; + case 0: /* We've been given a long option. */ break; @@ -3505,6 +3758,59 @@ copy_main (int argc, char *argv[]) if (output_target == NULL) output_target = input_target; + /* Convert input EFI target to PEI target. */ + if (input_target != NULL + && strncmp (input_target, "efi-", 4) == 0) + { + char *efi; + + efi = xstrdup (output_target + 4); + if (strncmp (efi, "bsdrv-", 6) == 0 + || strncmp (efi, "rtdrv-", 6) == 0) + efi += 2; + else if (strncmp (efi, "app-", 4) != 0) + fatal (_("unknown input EFI target: %s"), input_target); + + input_target = efi; + convert_efi_target (efi); + } + + /* Convert output EFI target to PEI target. */ + if (output_target != NULL + && strncmp (output_target, "efi-", 4) == 0) + { + char *efi; + + efi = xstrdup (output_target + 4); + if (strncmp (efi, "app-", 4) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; + } + else if (strncmp (efi, "bsdrv-", 6) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER; + efi += 2; + } + else if (strncmp (efi, "rtdrv-", 6) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER; + efi += 2; + } + else + fatal (_("unknown output EFI target: %s"), output_target); + + if (pe_file_alignment == (bfd_vma) -1) + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + if (pe_section_alignment == (bfd_vma) -1) + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + + output_target = efi; + convert_efi_target (efi); + } + if (binary_architecture != NULL) { if (input_target && strcmp (input_target, "binary") == 0) |