binutils-gdb/bfd/config.bfd
Tamar Christina b69c9d41e8 AArch64: Add support for AArch64 EFI (efi-*-aarch64).
This adds support for efi-*-aarch64 by virtue of adding a new PEI target
pei-aarch64-little.  This is not a full target and only exists to support EFI
at this time.

This means that this target does not support relocation processing and is mostly
a container format.  This format has been added to elf based aarch64 targets
such that efi images can be made natively on Linux.

However this target is not valid for use with gas but only with objcopy.

With these changes the resulting file is recognized as an efi image by
third party tools:

>  pecli info hello.efi

Metadata
================================================================================
MD5:            598c32a778b0f0deebe977fef8578c4e
SHA1:           4580121edd5cb4dc40f51b28f171fd15250df84c
SHA256:         3154bd7cf42433d1c957f6bf55a17ad8c57ed41b29df2d485703349fd6ff1d5c
Imphash:
Size:           47561 bytes
Type:           PE32+ executable (EFI application) (stripped to external PDB), for MS Windows
Compile Time:   1970-01-01 00:00:00 (UTC - 0x0       )
Entry point:    0x2000 (section .text)

Sections
================================================================================
Name      RWX  VirtSize   VirtAddr   RawAddr   RawSize   Entropy  md5
.text     R-X  0x5bb0     0x2000     0x400     0x5c00      6.39 551fbc264256a3f387de8a891500ae0d
.reloc    R--  0xc        0x8000     0x6000    0x200       0.02 0c45f6d812d079821c1d54c09ab89e1d
.data     RW-  0x1d88     0x9000     0x6200    0x1e00      4.18 5d1137c09f01289dc62bf754f7290db3
.dynamic  RW-  0xf0       0xb000     0x8000    0x200       0.34 5c94ed3206f05a277e6f04fbf131f131
.rela     R--  0xe58      0xc000     0x8200    0x1000      1.87 8b5c6bc30f3acb7ca7bf2e6789d68519
.dynsym   R--  0x138      0xd000     0x9200    0x200       0.96 bdcf5101da51aadc663ca8859f88138c

Imports
================================================================================

Any magic number is based on the Microsoft PE specification [1].

[1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format

bfd/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* .gitignore (pe-aarch64igen.c): New.
	* Makefile.am (pei-aarch64.lo, pe-aarch64igen.lo, pei-aarch64.c,
	pe-aarch64igen.c): Add support.
	* Makefile.in: Likewise.
	* bfd.c (bfd_get_sign_extend_vma): Add pei-aarch64-little.
	* coff-aarch64.c: New file.
	* coffcode.h (coff_set_arch_mach_hook, coff_set_flags,
	coff_write_object_contents) Add aarch64 (aarch64_pei_vec) support.
	* config.bfd: Likewise.
	* configure: Likewise.
	* configure.ac: Likewise.
	* libpei.h (GET_OPTHDR_IMAGE_BASE, PUT_OPTHDR_IMAGE_BASE,
	GET_OPTHDR_SIZE_OF_STACK_RESERVE, PUT_OPTHDR_SIZE_OF_STACK_RESERVE,
	GET_OPTHDR_SIZE_OF_STACK_COMMIT, PUT_OPTHDR_SIZE_OF_STACK_COMMIT,
	GET_OPTHDR_SIZE_OF_HEAP_RESERVE, PUT_OPTHDR_SIZE_OF_HEAP_RESERVE,
	GET_OPTHDR_SIZE_OF_HEAP_COMMIT, PUT_OPTHDR_SIZE_OF_HEAP_COMMIT,
	GET_PDATA_ENTRY, _bfd_peAArch64_bfd_copy_private_bfd_data_common,
	_bfd_peAArch64_bfd_copy_private_section_data,
	_bfd_peAArch64_get_symbol_info, _bfd_peAArch64_only_swap_filehdr_out,
	_bfd_peAArch64_print_private_bfd_data_common,
	_bfd_peAArch64i_final_link_postscript,
	_bfd_peAArch64i_only_swap_filehdr_out, _bfd_peAArch64i_swap_aouthdr_in,
	_bfd_peAArch64i_swap_aouthdr_out, _bfd_peAArch64i_swap_aux_in,
	_bfd_peAArch64i_swap_aux_out, _bfd_peAArch64i_swap_lineno_in,
	_bfd_peAArch64i_swap_lineno_out, _bfd_peAArch64i_swap_scnhdr_out,
	_bfd_peAArch64i_swap_sym_in, _bfd_peAArch64i_swap_sym_out,
	_bfd_peAArch64i_swap_debugdir_in, _bfd_peAArch64i_swap_debugdir_out,
	_bfd_peAArch64i_write_codeview_record,
	_bfd_peAArch64i_slurp_codeview_record,
	_bfd_peAArch64_print_ce_compressed_pdata): New.
	* peXXigen.c (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out,
	pe_print_pdata, _bfd_XX_print_private_bfd_data_common,
	_bfd_XX_bfd_copy_private_section_data, _bfd_XXi_final_link_postscript):
	Support COFF_WITH_peAArch64,
	* pei-aarch64.c: New file.
	* peicode.h (coff_swap_scnhdr_in, pe_ILF_build_a_bfd, pe_ILF_object_p):
	Support COFF_WITH_peAArch64.
	(jtab): Add dummy entry that traps.
	* targets.c (aarch64_pei_vec): New.

binutils/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* NEWS: Add new support.
	* objcopy.c (convert_efi_target): Add efi-*-aarch64 support.
	* testsuite/binutils-all/aarch64/pei-aarch64-little.d: New test.
	* testsuite/binutils-all/aarch64/pei-aarch64-little.s: New test.

include/ChangeLog:

2021-10-21  Tamar Christina  <tamar.christina@arm.com>

	PR binutils/26206
	* coff/aarch64.h: New file.
	* coff/pe.h (IMAGE_FILE_MACHINE_ARM64): New.
2021-11-23 09:36:39 +00:00

1536 lines
44 KiB
Plaintext

# config.bfd
#
# Copyright (C) 2012-2021 Free Software Foundation, Inc.
#
# This file 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; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
#
# Convert a canonical host type into a BFD host type.
# Set shell variable targ to canonical target name, and run
# using ``. config.bfd''.
# Sets the following shell variables:
# targ_defvec Default vector for this target
# targ_selvecs Vectors to build for this target
# targ64_selvecs Vectors to build if --enable-64-bit-bfd is given
# or if host is 64 bit.
# targ_archs Architectures for this target
# targ_cflags $(CFLAGS) for this target (FIXME: pretty bogus)
# targ_underscore Whether underscores are used: yes or no
# Part of this file is processed by targmatch.sed to generate the
# targmatch.h file. The #ifdef and #endif lines that appear below are
# copied directly into targmatch.h.
# The binutils c++filt program wants to know whether underscores are
# stripped or not. That is why we set targ_underscore. c++filt uses
# this information to choose a default. This information is
# duplicated in the symbol_leading_char field of the BFD target
# vector, but c++filt does not deal with object files and is not
# linked against libbfd.a. It is not terribly important that c++filt
# get this right; it is just convenient.
targ_defvec=
targ_selvecs=
targ64_selvecs=
targ_cflags=
targ_underscore=no
# Catch obsolete configurations.
case $targ in
ns32k-*-netbsd* | \
null)
if test "x$enable_obsolete" != xyes; then
echo "*** Configuration $targ is obsolete." >&2
echo "*** Specify --enable-obsolete to build it anyway." >&2
echo "*** Support will be REMOVED in the next major release of BINUTILS," >&2
echo "*** unless a maintainer comes forward." >&2
exit 1
fi;;
esac
# Warn on changed defaulting
case $targ in
*-*-netbsdelf* | *-*-netbsdaout* | *-*-netbsdpe*)
# Explicit, no defaulting
;;
ns32k-*-netbsd*)
# The obsolete warning is enough, and ns32k does not have ELF support
;;
*-*-netbsd* )
targ_migrated=`echo "$targ" | sed 's/netbsd/netbsdaout/'`
echo "*** WARNING: $targ is now defaults to meaning ELF not a.out." >&2
echo "*** Use $targ_migrated instead to explicitly specify a.out." >&2
;;
esac
case $targ in
mips*-*-irix5* | mips*-*-irix6*)
# Not obsolete
;;
*-adobe-* | \
*-go32-rtems* | \
*-sony-* | \
*-tandem-* | \
*-*-ieee* | \
*-*-netbsdpe* | \
*-*-netware* | \
*-*-rtemsaout* | \
*-*-rtemscoff* | \
a29k-* | \
arm*-*-aout | \
arm-*-coff | \
arm*-*-netbsdaout* | \
arm-*-openbsd* | \
arm-*-oabi | \
arm-*-riscix* | \
arm*-*-symbianelf* | \
arm-epoc-pe* | \
c30-*-*aout* | tic30-*-*aout* | \
cr16c-*-* | \
h8300*-*-coff | \
h8500*-*-coff | \
hppa*-*-rtems* | \
i[3-7]86-*-unixware* | \
i[3-7]86-*-dgux* | \
i[3-7]86-*-chorus* | \
i[3-7]86-*-sysv* | \
i[3-7]86-*-isc* | \
i[3-7]86-*-sco* | \
i[3-7]86-*-coff | \
i[3-7]86-*-aix* | \
i[3-7]86-sequent-bsd* | \
i[3-7]86-*-freebsdaout* | i[3-7]86-*-freebsd[12].* | i[3-7]86-*-freebsd[12] | \
i[3-7]86-*-netbsdaout* | \
i[3-7]86-*-openbsd[0-2].* | i[3-7]86-*-openbsd3.[0-3] | \
i[3-7]86-*-linux*aout* | \
i[3-7]86-*-mach* | i[3-7]86-*-osf1mk* | \
i[3-7]86-*-os9k | \
i[3-7]86-none-* | \
i[3-7]86-*-aout* | i[3-7]86*-*-vsta* | \
i370-* | \
i860-*-* | \
i960-*-* | \
m68*-*-bsd* | \
m68*-*-aout* | \
m68*-*-coff* | \
m68*-*-hpux* | \
m68*-*-linux*aout* | \
m68*-*-lynxos* | \
m68*-*-openbsd* | \
m68*-*-os68k* | \
m68*-*-psos* | \
m68*-*-sunos* | \
m68*-*-sysv* | \
m68*-*-vsta* | \
m68*-*-vxworks* | \
m68*-apollo-* | \
m68*-apple-aux* | \
m68*-bull-sysv* | \
m68*-ericsson-* | \
m68*-motorola-sysv* | \
m68*-netx-* | \
m88*-*-* | \
maxq-*-coff | \
mips*-*-bsd* | \
mips*-*-ecoff* | \
mips*-*-lnews* | \
mips*-*-mach3* | \
mips*-*-pe* | \
mips*-*-riscos* | \
mips*-*-sysv* | \
mips*-big-* | \
mips*-dec-* | \
mips*-sgi-* | \
mips*el-*-rtems* | \
openrisc-*-* | \
or32-*-* | \
powerpc-*-lynxos* | powerpc-*-windiss* | \
powerpcle-*-pe | powerpcle-*-winnt* | powerpcle-*-cygwin* | \
sh*-*-netbsdaout* | \
sh*-*-symbianelf* | sh5*-*-* | sh64*-*-* | \
sparc*-*-*aout* | \
sparc*-*-chorus* | \
sparc*-*-coff* | \
sparc-*-lynxos* | \
sparc-*-openbsd[0-2].* | sparc-*-openbsd3.[0-1] | \
tahoe-*-* | \
vax-*-bsd* | vax-*-ultrix* | vax-*-vms* | \
w65-*-* | \
we32k-*-* | \
xc16x-*-* | \
null)
echo "*** Configuration $targ is obsolete." >&2
echo "*** Support has been REMOVED." >&2
exit 1
;;
esac
targ_cpu=`echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
case "${targ_cpu}" in
aarch64*) targ_archs="bfd_aarch64_arch bfd_arm_arch";;
alpha*) targ_archs=bfd_alpha_arch ;;
am33_2.0*) targ_archs=bfd_mn10300_arch ;;
arc*) targ_archs=bfd_arc_arch ;;
arm*) targ_archs=bfd_arm_arch ;;
bfin*) targ_archs=bfd_bfin_arch ;;
c30*) targ_archs=bfd_tic30_arch ;;
c4x*) targ_archs=bfd_tic4x_arch ;;
c54x*) targ_archs=bfd_tic54x_arch ;;
cr16*) targ_archs=bfd_cr16_arch ;;
crisv32) targ_archs=bfd_cris_arch ;;
crx*) targ_archs=bfd_crx_arch ;;
csky*) targ_archs=bfd_csky_arch ;;
dlx*) targ_archs=bfd_dlx_arch ;;
fido*) targ_archs=bfd_m68k_arch ;;
hppa*) targ_archs=bfd_hppa_arch ;;
i[3-7]86) targ_archs=bfd_i386_arch ;;
ia16) targ_archs=bfd_i386_arch ;;
lm32) targ_archs=bfd_lm32_arch ;;
loongarch*) targ_archs=bfd_loongarch_arch ;;
m6811*|m68hc11*) targ_archs="bfd_m68hc11_arch bfd_m68hc12_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
m6812*|m68hc12*) targ_archs="bfd_m68hc12_arch bfd_m68hc11_arch bfd_m9s12x_arch bfd_m9s12xg_arch" ;;
m68*) targ_archs=bfd_m68k_arch ;;
s12z*) targ_archs=bfd_s12z_arch ;;
microblaze*) targ_archs=bfd_microblaze_arch ;;
mips*) targ_archs=bfd_mips_arch ;;
nds32*) targ_archs=bfd_nds32_arch ;;
nfp) targ_archs=bfd_nfp_arch ;;
nios2*) targ_archs=bfd_nios2_arch ;;
or1k*|or1knd*) targ_archs=bfd_or1k_arch ;;
pdp11*) targ_archs=bfd_pdp11_arch ;;
pj*) targ_archs="bfd_pj_arch bfd_i386_arch";;
powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
pru*) targ_archs=bfd_pru_arch ;;
riscv*) targ_archs=bfd_riscv_arch ;;
rs6000) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
s390*) targ_archs=bfd_s390_arch ;;
sh*) targ_archs=bfd_sh_arch ;;
sparc*) targ_archs=bfd_sparc_arch ;;
spu*) targ_archs=bfd_spu_arch ;;
tilegx*) targ_archs=bfd_tilegx_arch ;;
tilepro*) targ_archs=bfd_tilepro_arch ;;
v850*) targ_archs="bfd_v850_arch bfd_v850_rh850_arch" ;;
visium*) targ_archs=bfd_visium_arch ;;
wasm32) targ_archs=bfd_wasm32_arch ;;
x86_64*) targ_archs=bfd_i386_arch ;;
xtensa*) targ_archs=bfd_xtensa_arch ;;
xgate) targ_archs=bfd_xgate_arch ;;
z80*|r800|z180|gbz80|ez80*) targ_archs=bfd_z80_arch ;;
z8k*) targ_archs=bfd_z8k_arch ;;
*) targ_archs=bfd_${targ_cpu}_arch ;;
esac
# WHEN ADDING ENTRIES TO THIS MATRIX:
# Make sure that the left side always has two dashes. Otherwise you
# can get spurious matches. Even for unambiguous cases, do this as a
# convention, else the table becomes a real mess to understand and maintain.
case "${targ}" in
# START OF targmatch.h
#ifdef BFD64
aarch64-*-darwin*)
targ_defvec=aarch64_mach_o_vec
targ_selvecs="arm_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
want64=true
;;
aarch64-*-elf | aarch64-*-rtems* | aarch64-*-genode*)
targ_defvec=aarch64_elf64_le_vec
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
want64=true
;;
aarch64_be-*-elf)
targ_defvec=aarch64_elf64_be_vec
targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
want64=true
;;
aarch64-*-freebsd*)
targ_defvec=aarch64_elf64_le_vec
targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
want64=true
;;
aarch64-*-fuchsia*)
targ_defvec=aarch64_elf64_le_vec
targ_selvecs="aarch64_elf64_be_vec arm_elf32_le_vec arm_elf32_be_vec"
want64=true
;;
aarch64-*-cloudabi*)
targ_defvec=aarch64_elf64_le_cloudabi_vec
targ_selvecs=aarch64_elf64_be_cloudabi_vec
want64=true
;;
aarch64-*-haiku*)
targ_defvec=aarch64_elf64_le_vec
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
want64=true
;;
aarch64-*-linux* | aarch64-*-netbsd*)
targ_defvec=aarch64_elf64_le_vec
targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec aarch64_pei_vec"
want64=true
;;
aarch64_be-*-linux* | aarch64_be-*-netbsd*)
targ_defvec=aarch64_elf64_be_vec
targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
want64=true
;;
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
targ_defvec=alpha_elf64_fbsd_vec
targ_selvecs="alpha_elf64_vec alpha_ecoff_le_vec"
want64=true
# FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling.
case "${targ}" in
alpha*-*-freebsd3* | alpha*-*-freebsd4 | alpha*-*-freebsd4.0*)
targ_cflags=-DOLD_FREEBSD_ABI_LABEL ;;
esac
;;
alpha*-*-netbsd* | alpha*-*-openbsd*)
targ_defvec=alpha_elf64_vec
targ_selvecs=alpha_ecoff_le_vec
want64=true
;;
alpha*-*-linux*ecoff*)
targ_defvec=alpha_ecoff_le_vec
targ_selvecs=alpha_elf64_vec
want64=true
;;
alpha*-*-linux-* | alpha*-*-elf*)
targ_defvec=alpha_elf64_vec
targ_selvecs=alpha_ecoff_le_vec
want64=true
;;
alpha*-*-*vms*)
targ_defvec=alpha_vms_vec
targ_selvecs=alpha_vms_lib_txt_vec
want64=true
;;
alpha*-*-*)
targ_defvec=alpha_ecoff_le_vec
want64=true
;;
ia64*-*-freebsd* | ia64*-*-netbsd* | ia64*-*-linux-* | ia64*-*-elf* | ia64*-*-kfreebsd*-gnu)
targ_defvec=ia64_elf64_le_vec
targ_selvecs="ia64_elf64_be_vec ia64_pei_vec"
want64=true
;;
ia64*-*-hpux*)
targ_defvec=ia64_elf32_hpux_be_vec
targ_selvecs="ia64_elf64_hpux_be_vec"
want64=true
;;
ia64*-*-*vms*)
targ_defvec=ia64_elf64_vms_vec
targ_selvecs=alpha_vms_lib_txt_vec
want64=true
;;
#endif /* BFD64 */
am33_2.0-*-linux*)
targ_defvec=am33_elf32_linux_vec
;;
arc*eb-*-elf* | arc*eb-*-linux*)
targ_defvec=arc_elf32_be_vec
targ_selvecs=arc_elf32_le_vec
;;
arc*-*-elf* | arc*-*-linux*)
targ_defvec=arc_elf32_le_vec
targ_selvecs=arc_elf32_be_vec
;;
arm-*-darwin*)
targ_defvec=arm_mach_o_vec
targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec"
targ_archs="$targ_archs bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch"
;;
arm-*-fuchsia*)
targ_defvec=arm_elf32_le_vec
targ_selvecs="arm_elf32_be_vec"
;;
arm*-*-haiku*)
targ_defvec=arm_elf32_le_vec
targ_selvecs="arm_elf32_fdpic_le_vec arm_elf32_be_vec arm_elf32_fdpic_be_vec arm_pe_le_vec arm_pe_be_vec arm_pei_le_vec arm_pei_be_vec"
;;
arm-*-nacl*)
targ_defvec=arm_elf32_nacl_le_vec
targ_selvecs="arm_elf32_nacl_be_vec"
;;
armeb-*-nacl*)
targ_defvec=arm_elf32_nacl_be_vec
targ_selvecs="arm_elf32_nacl_le_vec"
;;
armeb-*-netbsd*)
targ_defvec=arm_elf32_be_vec
targ_selvecs="arm_elf32_le_vec"
;;
arm-*-netbsd*)
targ_defvec=arm_elf32_le_vec
targ_selvecs="arm_elf32_be_vec"
;;
arm-*-nto* | nto*arm*)
targ_defvec=arm_elf32_le_vec
targ_selvecs=arm_elf32_be_vec
targ_cflags=-D__QNXTARGET__
;;
arm-wince-pe | arm-*-wince | arm*-*-mingw32ce* | arm*-*-cegcc*)
targ_defvec=arm_pe_wince_le_vec
targ_selvecs="arm_pe_wince_le_vec arm_pe_wince_be_vec arm_pei_wince_le_vec arm_pei_wince_be_vec"
targ_underscore=no
targ_cflags="-DARM_WINCE -DARM_COFF_BUGFIX"
;;
arm-*-pe*)
targ_defvec=arm_pe_le_vec
targ_selvecs="arm_pe_le_vec arm_pe_be_vec arm_pei_le_vec arm_pei_be_vec"
targ_underscore=yes
;;
arm-*-phoenix*)
targ_defvec=arm_elf32_le_vec
targ_selvecs=arm_elf32_be_vec
;;
armeb-*-elf | arm*b-*-freebsd* | arm*b-*-linux-* | armeb-*-eabi*)
targ_defvec=arm_elf32_be_vec
targ_selvecs=arm_elf32_le_vec
;;
arm-*-kaos*)
targ_defvec=arm_elf32_le_vec
targ_selvecs=arm_elf32_be_vec
;;
arm-*-elf | arm*-*-freebsd* | arm*-*-linux-* | arm*-*-conix* | \
arm*-*-uclinux* | arm-*-kfreebsd*-gnu | \
arm*-*-eabi* | arm-*-rtems* | arm*-*-uclinuxfdpiceabi)
targ_defvec=arm_elf32_le_vec
targ_selvecs="arm_elf32_fdpic_le_vec arm_elf32_be_vec arm_elf32_fdpic_be_vec"
;;
arm*-*-vxworks | arm*-*-windiss)
targ_defvec=arm_elf32_vxworks_le_vec
targ_selvecs=arm_elf32_vxworks_be_vec
;;
arm9e-*-elf)
targ_defvec=arm_elf32_le_vec
targ_selvecs=arm_elf32_be_vec
;;
avr-*-*)
targ_defvec=avr_elf32_vec
;;
bfin-*-*)
targ_defvec=bfin_elf32_vec
targ_selvecs=bfin_elf32_fdpic_vec
targ_underscore=yes
;;
c30-*-*coff* | tic30-*-*coff*)
targ_defvec=tic30_coff_vec
;;
c4x-*-*coff* | tic4x-*-*coff*)
targ_defvec=tic4x_coff1_vec
targ_selvecs="tic4x_coff1_beh_vec tic4x_coff2_vec tic4x_coff2_beh_vec tic4x_coff0_vec tic4x_coff0_beh_vec"
targ_underscore=yes
;;
c54x*-*-*coff* | tic54x-*-*coff*)
targ_defvec=tic54x_coff1_vec
targ_selvecs="tic54x_coff1_beh_vec tic54x_coff2_vec tic54x_coff2_beh_vec tic54x_coff0_vec tic54x_coff0_beh_vec"
targ_underscore=yes
;;
cr16-*-elf* | cr16*-*-uclinux*)
targ_defvec=cr16_elf32_vec
targ_underscore=yes
;;
#ifdef BFD64
cris-*-* | crisv32-*-*)
targ_defvec=cris_aout_vec
targ_selvecs="cris_elf32_us_vec cris_elf32_vec"
case "${targ}" in
*-*-linux*) ;;
*) targ_underscore=yes ;;
esac
want64=true
;;
#endif
crx-*-elf*)
targ_defvec=crx_elf32_vec
targ_underscore=yes
;;
csky-*-elf* | csky-*-linux* )
targ_defvec=csky_elf32_le_vec
targ_selvecs="csky_elf32_be_vec csky_elf32_le_vec"
;;
d10v-*-*)
targ_defvec=d10v_elf32_vec
;;
dlx-*-elf*)
targ_defvec=dlx_elf32_be_vec
targ_selvecs="dlx_elf32_be_vec"
;;
d30v-*-*)
targ_defvec=d30v_elf32_vec
;;
#ifdef BFD64
bpf-*-none)
targ_defvec=bpf_elf64_le_vec
targ_selvecs=bpf_elf64_be_vec
targ_underscore=yes
;;
#endif
epiphany-*-*)
targ_defvec=epiphany_elf32_vec
targ_underscore=yes
;;
fido-*-elf* )
targ_defvec=m68k_elf32_vec
;;
fr30-*-elf)
targ_defvec=fr30_elf32_vec
;;
frv-*-elf)
targ_defvec=frv_elf32_vec
targ_selvecs=frv_elf32_fdpic_vec
;;
frv-*-*linux*)
targ_defvec=frv_elf32_fdpic_vec
targ_selvecs=frv_elf32_vec
;;
moxie-*-elf | moxie-*-rtems* | moxie-*-uclinux)
targ_defvec=moxie_elf32_be_vec
targ_selvecs=moxie_elf32_le_vec
;;
moxie-*-moxiebox*)
targ_defvec=moxie_elf32_le_vec
;;
h8300*-*-elf | h8300*-*-rtems*)
targ_defvec=h8300_elf32_vec
targ_underscore=yes
;;
h8300*-*-linux*)
targ_defvec=h8300_elf32_linux_vec
;;
#ifdef BFD64
hppa*64*-*-linux-*)
targ_defvec=hppa_elf64_linux_vec
targ_selvecs=hppa_elf64_vec
want64=true
;;
hppa*64*-*-hpux11*)
targ_defvec=hppa_elf64_vec
targ_selvecs=hppa_elf64_linux_vec
targ_cflags=-DHPUX_LARGE_AR_IDS
want64=true
;;
#endif
hppa*-*-linux-*)
targ_defvec=hppa_elf32_linux_vec
targ_selvecs=hppa_elf32_vec
;;
hppa*-*-netbsd*)
targ_defvec=hppa_elf32_nbsd_vec
targ_selvecs="hppa_elf32_vec hppa_elf32_linux_vec"
;;
hppa*-*-*elf* | hppa*-*-lites* | hppa*-*-sysv4* | hppa*-*-openbsd*)
targ_defvec=hppa_elf32_vec
targ_selvecs=hppa_elf32_linux_vec
;;
hppa*-*-bsd*)
targ_defvec=hppa_som_vec
targ_selvecs=hppa_elf32_vec
;;
hppa*-*-hpux* | hppa*-*-hiux* | hppa*-*-mpeix*)
targ_defvec=hppa_som_vec
;;
hppa*-*-osf*)
targ_defvec=hppa_som_vec
targ_selvecs=hppa_elf32_vec
;;
i[3-7]86-*-elf* | i[3-7]86-*-rtems* | i[3-7]86-*-genode*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_coff_vec"
;;
i[3-7]86-*-solaris2*)
targ_defvec=i386_elf32_sol2_vec
targ_selvecs="iamcu_elf32_vec i386_coff_vec i386_pei_vec"
targ64_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
#ifdef BFD64
x86_64-*-solaris2*)
targ_defvec=i386_elf32_sol2_vec
targ_selvecs="x86_64_elf64_sol2_vec l1om_elf64_vec k1om_elf64_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec"
want64=true
;;
#endif
i[3-7]86-*-nto*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_coff_vec"
;;
i[3-7]86-*-aros*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
;;
i[3-7]86-*-dicos*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
;;
*-*-msdosdjgpp* | *-*-go32* )
targ_defvec=i386_coff_go32_vec
targ_selvecs="i386_coff_go32stubbed_vec i386_aout_vec"
;;
i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*)
targ_defvec=i386_mach_o_vec
targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
targ64_selvecs=x86_64_mach_o_vec
targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
;;
i[3-7]86-*-bsd*)
targ_defvec=i386_aout_bsd_vec
targ_underscore=yes
;;
i[3-7]86-*-dragonfly*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
;;
i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu)
targ_defvec=i386_elf32_fbsd_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_pei_vec i386_coff_vec"
targ64_selvecs="x86_64_elf64_fbsd_vec x86_64_elf64_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_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*)
targ_cflags=-DOLD_FREEBSD_ABI_LABEL ;;
esac
;;
i[3-7]86-*-netbsd* | i[3-7]86-*-knetbsd*-gnu)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec"
targ64_selvecs="x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec"
;;
i[3-7]86-*-openbsd*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec"
;;
i[3-7]86-*-linux-*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_pei_vec"
targ64_selvecs="x86_64_elf64_vec x86_64_elf32_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
;;
i[3-7]86-*-redox*)
targ_defvec=i386_elf32_vec
targ_selvecs=
targ64_selvecs=x86_64_elf64_vec
;;
#ifdef BFD64
x86_64-*-cloudabi*)
targ_defvec=x86_64_elf64_cloudabi_vec
want64=true
;;
x86_64-*-darwin*)
targ_defvec=x86_64_mach_o_vec
targ_selvecs="i386_mach_o_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
targ_archs="$targ_archs bfd_powerpc_arch bfd_rs6000_arch"
want64=true
;;
x86_64-*-dicos*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
want64=true
;;
x86_64-*-elf* | x86_64-*-rtems* | x86_64-*-fuchsia | x86_64-*-genode*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec l1om_elf64_vec k1om_elf64_vec"
case "${targ}" in
x86_64-*-rtems*)
targ_selvecs="${targ_selvecs} x86_64_pe_vec x86_64_pei_vec"
esac
want64=true
;;
x86_64-*-dragonfly*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec l1om_elf64_vec k1om_elf64_vec"
want64=true
;;
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
targ_defvec=x86_64_elf64_fbsd_vec
targ_selvecs="i386_elf32_fbsd_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec i386_elf32_vec x86_64_elf64_vec l1om_elf64_vec l1om_elf64_fbsd_vec k1om_elf64_vec k1om_elf64_fbsd_vec"
want64=true
;;
x86_64-*-haiku*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec"
want64=true
;;
x86_64-*-netbsd* | x86_64-*-openbsd*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec i386_coff_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
want64=true
;;
x86_64-*-linux-*)
targ_defvec=x86_64_elf64_vec
targ_selvecs="i386_elf32_vec iamcu_elf32_vec x86_64_elf32_vec i386_pei_vec x86_64_pe_vec x86_64_pei_vec l1om_elf64_vec k1om_elf64_vec"
want64=true
;;
x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin)
targ_defvec=x86_64_pe_vec
targ_selvecs="x86_64_pe_vec x86_64_pei_vec x86_64_pe_big_vec x86_64_elf64_vec l1om_elf64_vec k1om_elf64_vec i386_pe_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
want64=true
targ_underscore=no
;;
x86_64-*-rdos*)
targ_defvec=x86_64_elf64_vec
want64=true
;;
x86_64-*-redox*)
targ_defvec=x86_64_elf64_vec
targ_selvecs=i386_elf32_vec
want64=true
;;
#endif
i[3-7]86-*-lynxos*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_coff_lynx_vec i386_aout_lynx_vec"
;;
i[3-7]86-*-gnu*)
targ_defvec=i386_elf32_vec
targ_selvecs=iamcu_elf32_vec
;;
i[3-7]86-*-msdos*)
targ_defvec=i386_aout_vec
targ_selvecs=i386_msdos_vec
;;
i[3-7]86-*-moss*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_msdos_vec i386_aout_vec"
;;
i[3-7]86-*-beospe*)
targ_defvec=i386_pe_vec
targ_selvecs="i386_pe_vec i386_pei_vec"
;;
i[3-7]86-*-beoself* | i[3-7]86-*-beos*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_pe_vec i386_pei_vec"
;;
i[3-7]86-*-haiku*)
targ_defvec=i386_elf32_vec
;;
i[3-7]86-*-interix*)
targ_defvec=i386_pei_vec
targ_selvecs="i386_pe_vec"
# FIXME: This should eventually be checked at runtime.
targ_cflags=-DSTRICT_PE_FORMAT
;;
i[3-7]86-*-rdos*)
targ_defvec=i386_elf32_vec
targ_selvecs="iamcu_elf32_vec i386_coff_vec"
;;
i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
targ_defvec=i386_pe_vec
targ_selvecs="i386_pe_vec i386_pe_big_vec i386_pei_vec i386_elf32_vec iamcu_elf32_vec"
targ_underscore=yes
;;
i[3-7]86-*-vxworks*)
targ_defvec=i386_elf32_vxworks_vec
targ_underscore=yes
;;
ia16-*-elf)
targ_defvec=i386_elf32_vec
targ_selvecs="i386_msdos_vec i386_aout_vec"
;;
ip2k-*-elf)
targ_defvec=ip2k_elf32_vec
targ_underscore=yes
;;
iq2000-*-elf)
targ_defvec=iq2000_elf32_vec
;;
lm32-*-elf | lm32-*-rtems*)
targ_defvec=lm32_elf32_vec
targ_selvecs=lm32_elf32_fdpic_vec
;;
lm32-*-*linux*)
targ_defvec=lm32_elf32_fdpic_vec
targ_selvecs=lm32_elf32_vec
;;
m32c-*-elf | m32c-*-rtems*)
targ_defvec=m32c_elf32_vec
targ_underscore=yes
;;
m32r*le-*-linux*)
targ_defvec=m32r_elf32_linux_le_vec
targ_selvecs="m32r_elf32_linux_vec m32r_elf32_linux_le_vec"
;;
m32r*-*-linux*)
targ_defvec=m32r_elf32_linux_vec
targ_selvecs="m32r_elf32_linux_vec m32r_elf32_linux_le_vec"
;;
m32r*le-*-*)
targ_defvec=m32r_elf32_le_vec
targ_selvecs="m32r_elf32_vec m32r_elf32_le_vec"
;;
m32r-*-*)
targ_defvec=m32r_elf32_vec
;;
m68*-*-haiku*)
targ_defvec=m68k_elf32_vec
;;
m68hc11-*-* | m6811-*-*)
targ_defvec=m68hc11_elf32_vec
targ_selvecs="m68hc11_elf32_vec m68hc12_elf32_vec"
;;
m68hc12-*-* | m6812-*-*)
targ_defvec=m68hc12_elf32_vec
targ_selvecs="m68hc11_elf32_vec m68hc12_elf32_vec"
;;
m68*-*-*)
targ_defvec=m68k_elf32_vec
;;
s12z-*-*)
targ_defvec=s12z_elf32_vec
;;
mcore-*-elf)
targ_defvec=mcore_elf32_be_vec
targ_selvecs="mcore_elf32_be_vec mcore_elf32_le_vec"
;;
mcore-*-pe)
targ_defvec=mcore_pe_be_vec
targ_selvecs="mcore_pe_be_vec mcore_pe_le_vec mcore_pei_be_vec mcore_pei_le_vec"
;;
mep-*-elf)
targ_defvec=mep_elf32_vec
targ_selvecs=mep_elf32_le_vec
;;
metag-*-*)
targ_defvec=metag_elf32_vec
targ_underscore=yes
;;
microblazeel*-*)
targ_defvec=microblaze_elf32_le_vec
targ_selvecs=microblaze_elf32_vec
;;
microblaze*-*)
targ_defvec=microblaze_elf32_vec
targ_selvecs=microblaze_elf32_le_vec
;;
#ifdef BFD64
mips*el-*-netbsd*)
targ_defvec=mips_elf32_trad_le_vec
targ_selvecs="mips_elf32_trad_be_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec mips_ecoff_le_vec mips_ecoff_be_vec"
;;
mips*-*-netbsd*)
targ_defvec=mips_elf32_trad_be_vec
targ_selvecs="mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
;;
mips*el-*-haiku*)
targ_defvec=mips_elf32_le_vec
targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_le_vec mips_ecoff_be_vec"
;;
mips*-*-irix6*)
targ_defvec=mips_elf32_n_be_vec
targ_selvecs="mips_elf32_n_le_vec mips_elf32_be_vec mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips64*-ps2-elf*)
targ_defvec=mips_elf32_n_le_vec
targ_selvecs="mips_elf32_n_le_vec mips_elf32_n_be_vec mips_elf32_be_vec mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips*-ps2-elf*)
targ_defvec=mips_elf32_le_vec
targ_selvecs="mips_elf32_be_vec mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips*-*-irix5*)
targ_defvec=mips_elf32_be_vec
targ_selvecs="mips_elf32_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
;;
mips*el-*-vxworks*)
targ_defvec=mips_elf32_vxworks_le_vec
targ_selvecs="mips_elf32_le_vec mips_elf32_vxworks_be_vec mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips*-*-vxworks*)
targ_defvec=mips_elf32_vxworks_be_vec
targ_selvecs="mips_elf32_be_vec mips_elf32_vxworks_le_vec mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips*el-sde-elf*)
targ_defvec=mips_elf32_trad_le_vec
targ_selvecs="mips_elf32_trad_be_vec mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
;;
mips*-sde-elf* | mips*-mti-elf* | mips*-img-elf*)
targ_defvec=mips_elf32_trad_be_vec
targ_selvecs="mips_elf32_trad_le_vec mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
;;
mips*el-*-elf* | mips*-*-chorus*)
targ_defvec=mips_elf32_le_vec
targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips*-*-elf* | mips*-*-rtems* | mips*-*-windiss | mips*-*-none)
targ_defvec=mips_elf32_be_vec
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec"
;;
mips64*-*-openbsd*)
targ_defvec=mips_elf64_trad_be_vec
targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec"
;;
mips*el-*-openbsd*)
targ_defvec=mips_elf32_le_vec
targ_selvecs="mips_elf32_be_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_le_vec mips_ecoff_be_vec"
;;
mips*-*-openbsd*)
targ_defvec=mips_elf32_be_vec
targ_selvecs="mips_elf32_le_vec mips_elf64_be_vec mips_elf64_le_vec mips_ecoff_be_vec mips_ecoff_le_vec"
;;
mips64*el-*-linux*)
targ_defvec=mips_elf32_ntrad_le_vec
targ_selvecs="mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
;;
mips64*-*-linux*)
targ_defvec=mips_elf32_ntrad_be_vec
targ_selvecs="mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
;;
mips*el-*-linux*)
targ_defvec=mips_elf32_trad_le_vec
targ_selvecs="mips_elf32_trad_be_vec mips_ecoff_le_vec mips_ecoff_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_le_vec mips_elf32_ntrad_be_vec mips_elf64_trad_be_vec"
;;
mips*-*-linux*)
targ_defvec=mips_elf32_trad_be_vec
targ_selvecs="mips_elf32_trad_le_vec mips_ecoff_be_vec mips_ecoff_le_vec mips_elf32_ntrad_be_vec mips_elf64_trad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_le_vec"
;;
mips64*el-*-freebsd* | mips64*el-*-kfreebsd*-gnu)
# FreeBSD vectors
targ_defvec=mips_elf32_ntradfbsd_le_vec
targ_selvecs="mips_elf32_ntradfbsd_be_vec mips_elf32_tradfbsd_le_vec mips_elf32_tradfbsd_be_vec mips_elf64_tradfbsd_le_vec mips_elf64_tradfbsd_be_vec"
# Generic vectors
targ_selvecs="${targ_selvecs} mips_elf32_ntrad_le_vec mips_elf32_ntrad_be_vec mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf64_trad_le_vec mips_elf64_trad_be_vec"
;;
mips64*-*-freebsd* | mips64*-*-kfreebsd*-gnu)
# FreeBSD vectors
targ_defvec=mips_elf32_ntradfbsd_be_vec
targ_selvecs="mips_elf32_ntradfbsd_le_vec mips_elf32_tradfbsd_be_vec mips_elf32_tradfbsd_le_vec mips_elf64_tradfbsd_be_vec mips_elf64_tradfbsd_le_vec"
# Generic vectors
targ_selvecs="${targ_selvecs} mips_elf32_ntrad_be_vec mips_elf32_ntrad_le_vec mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf64_trad_be_vec mips_elf64_trad_le_vec"
;;
mips*el-*-freebsd* | mips*el-*-kfreebsd*-gnu)
# FreeBSD vectors
targ_defvec=mips_elf32_tradfbsd_le_vec
targ_selvecs="mips_elf32_tradfbsd_be_vec mips_elf32_ntradfbsd_le_vec mips_elf64_tradfbsd_le_vec mips_elf32_ntradfbsd_be_vec mips_elf64_tradfbsd_be_vec"
# Generic vectors
targ_selvecs="${targ_selvecs} mips_elf32_trad_le_vec mips_elf32_trad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_le_vec mips_elf32_ntrad_be_vec mips_elf64_trad_be_vec"
;;
mips*-*-freebsd* | mips*-*-kfreebsd*-gnu)
# FreeBSD vectors
targ_defvec=mips_elf32_tradfbsd_be_vec
targ_selvecs="mips_elf32_tradfbsd_le_vec mips_elf32_ntradfbsd_be_vec mips_elf64_tradfbsd_be_vec mips_elf32_ntradfbsd_le_vec mips_elf64_tradfbsd_le_vec"
# Generic vectors
targ_selvecs="${targ_selvecs} mips_elf32_trad_be_vec mips_elf32_trad_le_vec mips_elf32_ntrad_be_vec mips_elf64_trad_be_vec mips_elf32_ntrad_le_vec mips_elf64_trad_le_vec"
;;
mmix-*-*)
targ_defvec=mmix_elf64_vec
targ_selvecs=mmix_mmo_vec
want64=true
;;
#endif
mn10200-*-*)
targ_defvec=mn10200_elf32_vec
targ_underscore=yes
;;
mn10300-*-*)
targ_defvec=mn10300_elf32_vec
targ_underscore=yes
;;
mt-*-elf)
targ_defvec=mt_elf32_vec
;;
msp430-*-*)
targ_defvec=msp430_elf32_vec
targ_selvecs=msp430_elf32_ti_vec
;;
nds32*le-*-linux*)
targ_defvec=nds32_elf32_linux_le_vec
targ_selvecs=nds32_elf32_linux_be_vec
;;
nds32*be-*-linux*)
targ_defvec=nds32_elf32_linux_be_vec
targ_selvecs=nds32_elf32_linux_le_vec
;;
nds32*le-*-*)
targ_defvec=nds32_elf32_le_vec
targ_selvecs=nds32_elf32_be_vec
;;
nds32*be-*-*)
targ_defvec=nds32_elf32_be_vec
targ_selvecs=nds32_elf32_le_vec
;;
#ifdef BFD64
nfp-*-*)
targ_defvec=nfp_elf64_vec
;;
#endif
ns32k-pc532-mach* | ns32k-pc532-ux*)
targ_defvec=ns32k_aout_pc532mach_vec
targ_underscore=yes
;;
ns32k-*-lites* | ns32k-*-*bsd*)
targ_defvec=ns32k_aout_pc532nbsd_vec
targ_underscore=yes
;;
nios2eb-*-*)
targ_defvec=nios2_elf32_be_vec
targ_selvecs=nios2_elf32_le_vec
;;
nios2el-*-*)
targ_defvec=nios2_elf32_le_vec
targ_selvecs=nios2_elf32_be_vec
;;
nios2-*-*)
targ_defvec=nios2_elf32_le_vec
targ_selvecs=nios2_elf32_be_vec
;;
or1k-*-elf | or1k-*-linux* | or1k-*-rtems*)
targ_defvec=or1k_elf32_vec
;;
or1knd-*-elf | or1knd-*-linux* | or1knd-*-rtems*)
targ_defvec=or1k_elf32_vec
;;
pdp11-*-*)
targ_defvec=pdp11_aout_vec
targ_underscore=yes
;;
pj-*-*)
targ_defvec=pj_elf32_vec
targ_selvecs="pj_elf32_vec pj_elf32_le_vec"
;;
pjl-*-*)
targ_defvec=pj_elf32_le_vec
targ_selvecs="pj_elf32_le_vec pj_elf32_vec i386_elf32_vec iamcu_elf32_vec"
;;
powerpc-*-aix5.[01] | rs6000-*-aix5.[01])
targ_defvec=rs6000_xcoff_vec
targ_selvecs="rs6000_xcoff64_aix_vec"
want64=true
;;
powerpc-*-haiku*)
targ_defvec=powerpc_elf32_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec pef_vec pef_xlib_vec powerpc_xcoff_vec powerpc_boot_vec"
targ_cflags=-D__HAIKU_TARGET__
;;
#ifdef BFD64
powerpc64-*-aix5.[01])
targ_defvec=rs6000_xcoff64_aix_vec
targ_selvecs="rs6000_xcoff_vec"
want64=true
;;
#endif
powerpc-*-aix[5-9]* | rs6000-*-aix[5-9]*)
targ_cflags=-DAIX_WEAK_SUPPORT
targ_defvec=rs6000_xcoff_vec
targ_selvecs="rs6000_xcoff64_aix_vec"
want64=true
;;
#ifdef BFD64
powerpc64-*-aix[5-9]*)
targ_cflags=-DAIX_WEAK_SUPPORT
targ_defvec=rs6000_xcoff64_aix_vec
targ_selvecs="rs6000_xcoff_vec"
want64=true
;;
#endif
powerpc-*-aix* | powerpc-*-beos* | rs6000-*-*)
targ_defvec=rs6000_xcoff_vec
targ64_selvecs=rs6000_xcoff64_vec
case "${targ}" in
*-*-aix4.[3456789]* | *-*-aix[56789]*)
want64=true;;
*)
targ_cflags=-DSMALL_ARCHIVE;;
esac
;;
#ifdef BFD64
powerpc64-*-aix*)
targ_defvec=rs6000_xcoff64_vec
targ_selvecs=rs6000_xcoff_vec
want64=true
;;
powerpc64-*-freebsd*)
targ_defvec=powerpc_elf64_fbsd_vec
targ_selvecs="powerpc_elf64_vec powerpc_elf32_vec powerpc_elf32_fbsd_vec powerpc_elf32_le_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
want64=true
;;
powerpc64le-*-freebsd*)
targ_defvec=powerpc_elf64_fbsd_le_vec
targ_selvecs="powerpc_elf64_vec powerpc_elf32_vec powerpc_elf32_fbsd_vec powerpc_elf32_le_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
want64=true
;;
powerpc64-*-elf* | powerpc-*-elf64* | powerpc64-*-linux* | \
powerpc64-*-*bsd*)
targ_defvec=powerpc_elf64_vec
targ_selvecs="powerpc_elf64_le_vec powerpc_elf32_vec powerpc_elf32_le_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
want64=true
;;
powerpc64le-*-elf* | powerpcle-*-elf64* | powerpc64le-*-linux* | \
powerpc64le-*-*bsd*)
targ_defvec=powerpc_elf64_le_vec
targ_selvecs="powerpc_elf64_vec powerpc_elf32_le_vec powerpc_elf32_vec rs6000_xcoff_vec rs6000_xcoff64_vec rs6000_xcoff64_aix_vec"
want64=true
;;
#endif
powerpc-*-*freebsd*)
targ_defvec=powerpc_elf32_fbsd_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_elf32_le_vec powerpc_boot_vec"
targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec powerpc_elf64_fbsd_vec"
;;
powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \
powerpc-*-solaris2* | powerpc-*-linux-* | powerpc-*-rtems* | \
powerpc-*-chorus*)
targ_defvec=powerpc_elf32_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec powerpc_boot_vec"
targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
;;
powerpc-*-kaos*)
targ_defvec=powerpc_elf32_vec
targ_selvecs="powerpc_elf32_le_vec powerpc_boot_vec"
targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
;;
powerpc-*-darwin* | powerpc-*-macos10* | powerpc-*-rhapsody*)
targ_defvec=mach_o_be_vec
targ_selvecs="mach_o_be_vec mach_o_le_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec"
targ_archs="$targ_archs bfd_i386_arch"
;;
powerpc-*-macos*)
targ_defvec=powerpc_xcoff_vec
;;
powerpc-*-lynxos*)
targ_defvec=powerpc_elf32_vec
targ_selvecs="rs6000_xcoff_vec"
targ_cflags=-DSMALL_ARCHIVE
;;
powerpc-*-nto*)
targ_defvec=powerpc_elf32_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_le_vec powerpc_boot_vec"
;;
powerpc-*-vxworks* | powerpc-*-windiss*)
targ_defvec=powerpc_elf32_vxworks_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_elf32_le_vec powerpc_boot_vec"
targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
;;
powerpcle-*-nto*)
targ_defvec=powerpc_elf32_le_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_boot_vec"
;;
powerpcle-*-elf* | powerpcle-*-sysv4* | powerpcle-*-eabi* | \
powerpcle-*-solaris2* | powerpcle-*-linux-* | powerpcle-*-vxworks*)
targ_defvec=powerpc_elf32_le_vec
targ_selvecs="rs6000_xcoff_vec powerpc_elf32_vec powerpc_boot_vec"
targ64_selvecs="powerpc_elf64_vec powerpc_elf64_le_vec"
;;
pru-*-*)
targ_defvec=pru_elf32_vec
;;
#ifdef BFD64
riscvbe-*-* | riscv32be*-*-*)
targ_defvec=riscv_elf32_be_vec
targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec"
want64=true
;;
riscv-*-* | riscv32*-*-*)
targ_defvec=riscv_elf32_vec
targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec"
want64=true
;;
riscv64be*-*-*)
targ_defvec=riscv_elf64_be_vec
targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec"
want64=true
;;
riscv64*-*-*)
targ_defvec=riscv_elf64_vec
targ_selvecs="riscv_elf32_vec riscv_elf64_vec riscv_elf32_be_vec riscv_elf64_be_vec"
want64=true
;;
#endif
rl78-*-elf)
targ_defvec=rl78_elf32_vec
targ_underscore=yes
;;
rx-*-elf)
targ_defvec=rx_elf32_le_vec
targ_selvecs="rx_elf32_be_vec rx_elf32_le_vec rx_elf32_be_ns_vec"
targ_underscore=yes
;;
rx-*-linux*)
targ_defvec=rx_elf32_linux_le_vec
targ_selvecs="rx_elf32_linux_le_vec"
;;
s390-*-linux*)
targ_defvec=s390_elf32_vec
targ64_selvecs=s390_elf64_vec
want64=true
;;
#ifdef BFD64
s390x-*-linux*)
targ_defvec=s390_elf64_vec
targ_selvecs=s390_elf32_vec
want64=true
;;
s390x-*-tpf*)
targ_defvec=s390_elf64_vec
want64=true
;;
score*-*-elf*)
targ_defvec=score_elf32_be_vec
targ_selvecs=score_elf32_le_vec
;;
#endif /* BFD64 */
sh*eb-*-linux*)
targ_defvec=sh_elf32_linux_be_vec
targ_selvecs=sh_elf32_linux_vec
targ_selvecs="${targ_selvecs} sh_elf32_fdpic_le_vec sh_elf32_fdpic_be_vec"
;;
sh*-*-linux*)
targ_defvec=sh_elf32_linux_vec
targ_selvecs=sh_elf32_linux_be_vec
targ_selvecs="${targ_selvecs} sh_elf32_fdpic_le_vec sh_elf32_fdpic_be_vec"
;;
sh-*-uclinux* | sh[12]-*-uclinux*)
targ_defvec=sh_elf32_vec
targ_selvecs="sh_elf32_le_vec sh_elf32_linux_be_vec sh_elf32_linux_vec sh_elf32_fdpic_le_vec sh_elf32_fdpic_be_vec"
;;
sh*l*-*-netbsd*)
targ_defvec=sh_elf32_nbsd_le_vec
targ_selvecs="sh_elf32_nbsd_vec sh_coff_vec sh_coff_le_vec"
;;
sh*-*-netbsd*)
targ_defvec=sh_elf32_nbsd_vec
targ_selvecs="sh_elf32_nbsd_le_vec sh_coff_vec sh_coff_le_vec"
;;
shl*-*-elf* | sh[1234]l*-*-elf* | sh3el*-*-elf* | shl*-*-kaos*)
targ_defvec=sh_elf32_le_vec
targ_selvecs="sh_elf32_vec sh_coff_le_vec sh_coff_vec sh_coff_small_le_vec sh_coff_small_vec"
targ_underscore=yes
;;
sh-*-elf* | sh[1234]*-elf* | sh-*-rtems* | sh-*-kaos*)
targ_defvec=sh_elf32_vec
targ_selvecs="sh_elf32_le_vec sh_coff_vec sh_coff_le_vec sh_coff_small_vec sh_coff_small_le_vec"
targ_underscore=yes
;;
sh-*-nto*)
targ_defvec=sh_elf32_vec
targ_selvecs="sh_elf32_le_vec sh_coff_vec sh_coff_le_vec sh_coff_small_vec sh_coff_small_le_vec"
targ_underscore=yes
;;
sh*-*-openbsd*)
targ_defvec=sh_elf32_nbsd_le_vec
targ_selvecs="sh_elf32_nbsd_vec sh_coff_vec sh_coff_le_vec"
;;
sh-*-pe)
targ_defvec=sh_pe_le_vec
targ_selvecs="sh_pe_le_vec sh_pei_le_vec"
targ_underscore=yes
;;
sh-*-vxworks)
targ_defvec=sh_elf32_vxworks_vec
targ_selvecs="sh_elf32_vxworks_le_vec"
# FIXME None of the following are actually used on this target, but
# they're necessary for coff-sh.c (which is unconditionally used) to be
# compiled correctly.
targ_selvecs="$targ_selvecs sh_coff_vec sh_coff_le_vec sh_coff_small_vec sh_coff_small_le_vec"
targ_underscore=yes
;;
sh-*-*)
targ_defvec=sh_coff_vec
targ_selvecs="sh_coff_vec sh_coff_le_vec sh_coff_small_vec sh_coff_small_le_vec"
targ_underscore=yes
;;
sparc-*-solaris2.[0-6] | sparc-*-solaris2.[0-6].*)
# PR 27666: Do not include sparc_elf32_vec here.
targ_defvec=sparc_elf32_sol2_vec
;;
#ifdef BFD64
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
# PR 27666: Do not include sparc_elf32_vec or sparc_elf64_vec here.
targ_defvec=sparc_elf32_sol2_vec
targ_selvecs="sparc_elf64_sol2_vec"
want64=true
;;
sparc64-*-haiku*)
targ_defvec=sparc_elf64_vec
targ_selvecs="sparc_elf64_vec sparc_elf32_vec"
want64=true
;;
sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
targ_defvec=sparc_elf64_fbsd_vec
targ_selvecs="sparc_elf64_vec sparc_elf32_vec"
;;
sparc64*-*-*)
targ_defvec=sparc_elf64_vec
targ_selvecs="sparc_elf32_vec"
want64=true
;;
#endif
sparc-*-linux-* | sparcv*-*-linux-*)
targ_defvec=sparc_elf32_vec
targ_selvecs="sparc_elf64_vec"
;;
sparc-*-vxworks*)
targ_defvec=sparc_elf32_vxworks_vec
targ_selvecs="sparc_elf32_vec"
;;
sparc*-*-*)
targ_defvec=sparc_elf32_vec
;;
spu-*-elf)
targ_defvec=spu_elf32_vec
want64=true
;;
tic6x-*-elf)
targ_defvec=tic6x_elf32_c6000_le_vec
targ_selvecs="tic6x_elf32_c6000_be_vec tic6x_elf32_le_vec tic6x_elf32_be_vec"
;;
tic6x-*-uclinux)
targ_defvec=tic6x_elf32_linux_le_vec
targ_selvecs="tic6x_elf32_linux_be_vec tic6x_elf32_le_vec tic6x_elf32_be_vec"
;;
#ifdef BFD64
tilegx-*-*)
targ_defvec=tilegx_elf64_le_vec
targ_selvecs="tilegx_elf64_be_vec tilegx_elf32_be_vec tilegx_elf32_le_vec"
;;
tilegxbe-*-*)
targ_defvec=tilegx_elf64_be_vec
targ_selvecs="tilegx_elf64_le_vec tilegx_elf32_be_vec tilegx_elf32_le_vec"
;;
#endif
tilepro-*-*)
targ_defvec=tilepro_elf32_vec
;;
ft32*-*-*)
targ_defvec=ft32_elf32_vec
;;
v850*-*-*)
targ_defvec=v850_elf32_vec
targ_selvecs="v800_elf32_vec"
targ_underscore=yes
;;
vax-*-netbsdaout*)
targ_defvec=vax_aout_nbsd_vec
targ_selvecs="vax_elf32_vec vax_aout_1knbsd_vec"
targ_underscore=yes
;;
vax-*-netbsd*)
targ_defvec=vax_elf32_vec
targ_selvecs="vax_aout_nbsd_vec vax_aout_1knbsd_vec"
;;
vax-*-openbsd*)
targ_defvec=vax_aout_nbsd_vec
targ_underscore=yes
;;
vax-*-linux-*)
targ_defvec=vax_elf32_vec
;;
visium-*-elf)
targ_defvec=visium_elf32_vec
;;
wasm32-*-*)
targ_defvec=wasm32_elf32_vec
targ_selvecs="wasm_vec"
;;
xc16x-*-elf)
targ_defvec=xc16x_elf32_vec
;;
xgate-*-*)
targ_defvec=xgate_elf32_vec
targ_selvecs="xgate_elf32_vec"
;;
xstormy16-*-elf)
targ_defvec=xstormy16_elf32_vec
;;
xtensa*-*-*)
targ_defvec=xtensa_elf32_le_vec
targ_selvecs=xtensa_elf32_be_vec
;;
z80-*-coff)
targ_defvec=z80_coff_vec
targ_underscore=no
;;
z80-*-elf)
targ_defvec=z80_elf32_vec
targ_underscore=no
;;
z8k*-*-*)
targ_defvec=z8k_coff_vec
targ_underscore=yes
;;
#ifdef BFD64
loongarch32-*)
targ_defvec=loongarch_elf32_vec
targ_selvecs="loongarch_elf32_vec"
want64=false
;;
loongarch64-*)
targ_defvec=loongarch_elf64_vec
targ_selvecs="loongarch_elf32_vec loongarch_elf64_vec"
want64=true
;;
#endif
# END OF targmatch.h
bpf-*-*)
echo "*** Configuration $targ is not fully supported." >&2
echo "*** Use bpf or bpf-*-none as the target instead." >&2
exit 1
;;
*)
echo 1>&2 "*** BFD does not support target ${targ}."
echo 1>&2 "*** Look in bfd/config.bfd for supported targets."
exit 1
;;
esac
# All MIPS ELF targets need a 64-bit bfd_vma.
case "${targ_defvec} ${targ_selvecs}" in
*mips_elf*)
want64=true
;;
esac
case "${host64}${want64}" in
*true*)
targ_selvecs="${targ_selvecs} ${targ64_selvecs}"
;;
esac
# If we support any ELF target, then automatically add support for the
# generic ELF targets. This permits an objdump with some ELF support
# to be used on an arbitrary ELF file for anything other than
# relocation information.
case "${targ_defvec} ${targ_selvecs}" in
*elf64* | *mips_elf32_n*)
targ_selvecs="${targ_selvecs} elf64_le_vec elf64_be_vec elf32_le_vec elf32_be_vec"
;;
*elf32*)
targ_selvecs="${targ_selvecs} elf32_le_vec elf32_be_vec"
;;
esac
# If we support Intel MCU target, then add support for bfd_iamcu_arch.
case "${targ_defvec} ${targ_selvecs}" in
*iamcu_elf32*)
targ_archs="$targ_archs bfd_iamcu_arch"
;;
esac
# If we support Intel L1OM target, then add support for bfd_l1om_arch.
case "${targ_defvec} ${targ_selvecs}" in
*l1om_elf64*)
targ_archs="$targ_archs bfd_l1om_arch"
;;
esac
# If we support Intel K1OM target, then add support for bfd_k1om_arch.
case "${targ_defvec} ${targ_selvecs}" in
*k1om_elf64*)
targ_archs="$targ_archs bfd_k1om_arch"
;;
esac