Introduce basic_safe_range
[deliverable/binutils-gdb.git] / bfd / targets.c
index 95b5ec913a55185cccae2a5f7c9aee890aa18da8..fb0c669e7f7046409a97f16eabdee6671bf3899f 100644 (file)
@@ -1,5 +1,5 @@
 /* Generic target-file-type support for the BFD library.
-   Copyright (C) 1990-2018 Free Software Foundation, Inc.
+   Copyright (C) 1990-2019 Free Software Foundation, Inc.
    Written by Cygnus Support.
 
    This file is part of BFD, the Binary File Descriptor library.
@@ -179,7 +179,7 @@ DESCRIPTION
 .typedef struct bfd_target
 .{
 .  {* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  *}
-.  char *name;
+.  const char *name;
 .
 . {* The "flavour" of a back end is a general indication about
 .    the contents of a file.  *}
@@ -462,9 +462,11 @@ BFD_JUMP_TABLE macros.
 .  NAME##_bfd_lookup_section_flags, \
 .  NAME##_bfd_merge_sections, \
 .  NAME##_bfd_is_group_section, \
+.  NAME##_bfd_group_name, \
 .  NAME##_bfd_discard_group, \
 .  NAME##_section_already_linked, \
 .  NAME##_bfd_define_common_symbol, \
+.  NAME##_bfd_link_hide_symbol, \
 .  NAME##_bfd_define_start_stop
 .
 .  int        (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
@@ -519,6 +521,9 @@ BFD_JUMP_TABLE macros.
 .  {* Is this section a member of a group?  *}
 .  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
 .
+.  {* The group name, if section is a member of a group.  *}
+.  const char *(*_bfd_group_name) (bfd *, const struct bfd_section *);
+.
 .  {* Discard members of a group.  *}
 .  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
 .
@@ -531,6 +536,10 @@ BFD_JUMP_TABLE macros.
 .  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
 .                                           struct bfd_link_hash_entry *);
 .
+.  {* Hide a symbol.  *}
+.  void (*_bfd_link_hide_symbol) (bfd *, struct bfd_link_info *,
+.                                struct bfd_link_hash_entry *);
+.
 .  {* Define a __start, __stop, .startof. or .sizeof. symbol.  *}
 .  struct bfd_link_hash_entry *
 .             (*_bfd_define_start_stop) (struct bfd_link_info *, const char *,
@@ -575,6 +584,74 @@ to find an alternative output format that is suitable.
 .
 .} bfd_target;
 .
+.static inline const char *
+.bfd_get_target (const bfd *abfd)
+.{
+.  return abfd->xvec->name;
+.}
+.
+.static inline enum bfd_flavour
+.bfd_get_flavour (const bfd *abfd)
+.{
+.  return abfd->xvec->flavour;
+.}
+.
+.static inline flagword
+.bfd_applicable_file_flags (const bfd *abfd)
+.{
+.  return abfd->xvec->object_flags;
+.}
+.
+.static inline bfd_boolean
+.bfd_family_coff (const bfd *abfd)
+.{
+.  return (bfd_get_flavour (abfd) == bfd_target_coff_flavour
+.          || bfd_get_flavour (abfd) == bfd_target_xcoff_flavour);
+.}
+.
+.static inline bfd_boolean
+.bfd_big_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->byteorder == BFD_ENDIAN_BIG;
+.}
+.static inline bfd_boolean
+.bfd_little_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->byteorder == BFD_ENDIAN_LITTLE;
+.}
+.
+.static inline bfd_boolean
+.bfd_header_big_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->header_byteorder == BFD_ENDIAN_BIG;
+.}
+.
+.static inline bfd_boolean
+.bfd_header_little_endian (const bfd *abfd)
+.{
+.  return abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE;
+.}
+.
+.static inline flagword
+.bfd_applicable_section_flags (const bfd *abfd)
+.{
+.  return abfd->xvec->section_flags;
+.}
+.
+.static inline char
+.bfd_get_symbol_leading_char (const bfd *abfd)
+.{
+.  return abfd->xvec->symbol_leading_char;
+.}
+.
+.static inline enum bfd_flavour
+.bfd_asymbol_flavour (const asymbol *sy)
+.{
+.  if ((sy->flags & BSF_SYNTHETIC) != 0)
+.    return bfd_target_unknown_flavour;
+.  return sy->the_bfd->xvec->flavour;
+.}
+.
 */
 
 /* All known xvecs (even those that don't compile on all systems).
@@ -594,18 +671,13 @@ extern const bfd_target alpha_elf64_fbsd_vec;
 extern const bfd_target alpha_vms_vec;
 extern const bfd_target alpha_vms_lib_txt_vec;
 extern const bfd_target am33_elf32_linux_vec;
-extern const bfd_target aout64_vec;
 extern const bfd_target aout_vec;
 extern const bfd_target arc_elf32_be_vec;
 extern const bfd_target arc_elf32_le_vec;
-extern const bfd_target arm_aout_be_vec;
-extern const bfd_target arm_aout_le_vec;
-extern const bfd_target arm_aout_nbsd_vec;
-extern const bfd_target arm_aout_riscix_vec;
-extern const bfd_target arm_coff_be_vec;
-extern const bfd_target arm_coff_le_vec;
 extern const bfd_target arm_elf32_be_vec;
 extern const bfd_target arm_elf32_le_vec;
+extern const bfd_target arm_elf32_fdpic_be_vec;
+extern const bfd_target arm_elf32_fdpic_le_vec;
 extern const bfd_target arm_elf32_nacl_be_vec;
 extern const bfd_target arm_elf32_nacl_le_vec;
 extern const bfd_target arm_elf32_symbian_be_vec;
@@ -615,25 +687,22 @@ extern const bfd_target arm_elf32_vxworks_le_vec;
 extern const bfd_target arm_mach_o_vec;
 extern const bfd_target arm_pe_be_vec;
 extern const bfd_target arm_pe_le_vec;
-extern const bfd_target arm_pe_epoc_be_vec;
-extern const bfd_target arm_pe_epoc_le_vec;
 extern const bfd_target arm_pe_wince_be_vec;
 extern const bfd_target arm_pe_wince_le_vec;
 extern const bfd_target arm_pei_be_vec;
 extern const bfd_target arm_pei_le_vec;
-extern const bfd_target arm_pei_epoc_be_vec;
-extern const bfd_target arm_pei_epoc_le_vec;
 extern const bfd_target arm_pei_wince_be_vec;
 extern const bfd_target arm_pei_wince_le_vec;
 extern const bfd_target avr_elf32_vec;
 extern const bfd_target bfin_elf32_vec;
 extern const bfd_target bfin_elf32_fdpic_vec;
 extern const bfd_target cr16_elf32_vec;
-extern const bfd_target cr16c_elf32_vec;
 extern const bfd_target cris_aout_vec;
 extern const bfd_target cris_elf32_vec;
 extern const bfd_target cris_elf32_us_vec;
 extern const bfd_target crx_elf32_vec;
+extern const bfd_target csky_elf32_be_vec;
+extern const bfd_target csky_elf32_le_vec;
 extern const bfd_target d10v_elf32_vec;
 extern const bfd_target d30v_elf32_vec;
 extern const bfd_target dlx_elf32_be_vec;
@@ -641,6 +710,8 @@ extern const bfd_target elf32_be_vec;
 extern const bfd_target elf32_le_vec;
 extern const bfd_target elf64_be_vec;
 extern const bfd_target elf64_le_vec;
+extern const bfd_target bpf_elf64_le_vec;
+extern const bfd_target bpf_elf64_be_vec;
 extern const bfd_target epiphany_elf32_vec;
 extern const bfd_target fr30_elf32_vec;
 extern const bfd_target frv_elf32_vec;
@@ -655,13 +726,7 @@ extern const bfd_target hppa_elf64_linux_vec;
 extern const bfd_target hppa_som_vec;
 extern const bfd_target i386_aout_vec;
 extern const bfd_target i386_aout_bsd_vec;
-extern const bfd_target i386_aout_dynix_vec;
-extern const bfd_target i386_aout_fbsd_vec;
-extern const bfd_target i386_aout_linux_vec;
 extern const bfd_target i386_aout_lynx_vec;
-extern const bfd_target i386_aout_mach3_vec;
-extern const bfd_target i386_aout_nbsd_vec;
-extern const bfd_target i386_aout_os9k_vec;
 extern const bfd_target i386_coff_vec;
 extern const bfd_target i386_coff_go32_vec;
 extern const bfd_target i386_coff_go32stubbed_vec;
@@ -699,6 +764,7 @@ extern const bfd_target m32r_elf32_linux_le_vec;
 extern const bfd_target m68hc11_elf32_vec;
 extern const bfd_target m68hc12_elf32_vec;
 extern const bfd_target m68k_elf32_vec;
+extern const bfd_target s12z_elf32_vec;
 extern const bfd_target mach_o_be_vec;
 extern const bfd_target mach_o_le_vec;
 extern const bfd_target mach_o_fat_vec;
@@ -713,8 +779,6 @@ extern const bfd_target mep_elf32_le_vec;
 extern const bfd_target metag_elf32_vec;
 extern const bfd_target microblaze_elf32_vec;
 extern const bfd_target microblaze_elf32_le_vec;
-extern const bfd_target mips_aout_be_vec;
-extern const bfd_target mips_aout_le_vec;
 extern const bfd_target mips_ecoff_be_vec;
 extern const bfd_target mips_ecoff_le_vec;
 extern const bfd_target mips_ecoff_bele_vec;
@@ -738,8 +802,6 @@ extern const bfd_target mips_elf64_trad_be_vec;
 extern const bfd_target mips_elf64_trad_le_vec;
 extern const bfd_target mips_elf64_tradfbsd_be_vec;
 extern const bfd_target mips_elf64_tradfbsd_le_vec;
-extern const bfd_target mips_pe_le_vec;
-extern const bfd_target mips_pei_le_vec;
 extern const bfd_target mmix_elf64_vec;
 extern const bfd_target mmix_mmo_vec;
 extern const bfd_target mn10200_elf32_vec;
@@ -753,6 +815,7 @@ extern const bfd_target nds32_elf32_be_vec;
 extern const bfd_target nds32_elf32_le_vec;
 extern const bfd_target nds32_elf32_linux_be_vec;
 extern const bfd_target nds32_elf32_linux_le_vec;
+extern const bfd_target nfp_elf64_vec;
 extern const bfd_target nios2_elf32_be_vec;
 extern const bfd_target nios2_elf32_le_vec;
 extern const bfd_target ns32k_aout_pc532mach_vec;
@@ -787,6 +850,7 @@ extern const bfd_target rs6000_xcoff_vec;
 extern const bfd_target rx_elf32_be_vec;
 extern const bfd_target rx_elf32_be_ns_vec;
 extern const bfd_target rx_elf32_le_vec;
+extern const bfd_target rx_elf32_linux_le_vec;
 extern const bfd_target s390_elf32_vec;
 extern const bfd_target s390_elf64_vec;
 extern const bfd_target score_elf32_be_vec;
@@ -807,13 +871,6 @@ extern const bfd_target sh_elf32_vxworks_vec;
 extern const bfd_target sh_elf32_vxworks_le_vec;
 extern const bfd_target sh_pe_le_vec;
 extern const bfd_target sh_pei_le_vec;
-extern const bfd_target sparc_aout_le_vec;
-extern const bfd_target sparc_aout_linux_vec;
-extern const bfd_target sparc_aout_lynx_vec;
-extern const bfd_target sparc_aout_nbsd_vec;
-extern const bfd_target sparc_aout_sunos_be_vec;
-extern const bfd_target sparc_coff_vec;
-extern const bfd_target sparc_coff_lynx_vec;
 extern const bfd_target sparc_elf32_vec;
 extern const bfd_target sparc_elf32_sol2_vec;
 extern const bfd_target sparc_elf32_vxworks_vec;
@@ -938,9 +995,6 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &am33_elf32_linux_vec,
 
-#ifdef BFD64
-       &aout64_vec,    /* Only compiled if host has long-long support.  */
-#endif
 #if 0
        /* Since a.out files lack decent magic numbers, no way to recognize
           which kind of a.out file it is.  */
@@ -950,20 +1004,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &arc_elf32_be_vec,
        &arc_elf32_le_vec,
 
-#if 0
-       /* We have no way of distinguishing these from other a.out variants.  */
-       &arm_aout_be_vec,
-       &arm_aout_le_vec,
-#endif
-       &arm_aout_nbsd_vec,
-#if 0
-       /* We have no way of distinguishing these from other a.out variants.  */
-       &arm_aout_riscix_vec,
-#endif
-       &arm_coff_be_vec,
-       &arm_coff_le_vec,
        &arm_elf32_be_vec,
        &arm_elf32_le_vec,
+       &arm_elf32_fdpic_be_vec,
+       &arm_elf32_fdpic_le_vec,
        &arm_elf32_symbian_be_vec,
        &arm_elf32_symbian_le_vec,
        &arm_elf32_vxworks_be_vec,
@@ -971,14 +1015,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &arm_mach_o_vec,
        &arm_pe_be_vec,
        &arm_pe_le_vec,
-       &arm_pe_epoc_be_vec,
-       &arm_pe_epoc_le_vec,
        &arm_pe_wince_be_vec,
        &arm_pe_wince_le_vec,
        &arm_pei_be_vec,
        &arm_pei_le_vec,
-       &arm_pei_epoc_be_vec,
-       &arm_pei_epoc_le_vec,
        &arm_pei_wince_be_vec,
        &arm_pei_wince_le_vec,
 
@@ -988,7 +1028,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &bfin_elf32_fdpic_vec,
 
        &cr16_elf32_vec,
-       &cr16c_elf32_vec,
 
        &cris_aout_vec,
        &cris_elf32_vec,
@@ -996,6 +1035,9 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &crx_elf32_vec,
 
+       &csky_elf32_be_vec,
+       &csky_elf32_le_vec,
+
        &d10v_elf32_vec,
        &d30v_elf32_vec,
 
@@ -1033,22 +1075,7 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &i386_aout_vec,
        &i386_aout_bsd_vec,
-#if 0
-       &i386_aout_dynix_vec,
-#endif
-       &i386_aout_fbsd_vec,
-#if 0
-       /* Since a.out files lack decent magic numbers, no way to recognize
-          which kind of a.out file it is.  */
-       &i386_aout_linux_vec,
-#endif
        &i386_aout_lynx_vec,
-#if 0
-       /* No distinguishing features for Mach 3 executables.  */
-       &i386_aout_mach3_vec,
-#endif
-       &i386_aout_nbsd_vec,
-       &i386_aout_os9k_vec,
        &i386_coff_vec,
        &i386_coff_go32_vec,
        &i386_coff_go32stubbed_vec,
@@ -1065,6 +1092,11 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &iamcu_elf32_vec,
 
+#ifdef BFD64
+       &bpf_elf64_be_vec,
+       &bpf_elf64_le_vec,
+#endif
+
 #ifdef BFD64
 #if 0
        &ia64_elf32_be_vec,
@@ -1101,6 +1133,8 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &m68k_elf32_vec,
 
+       &s12z_elf32_vec,
+
        &mach_o_be_vec,
        &mach_o_le_vec,
        &mach_o_fat_vec,
@@ -1118,11 +1152,6 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &microblaze_elf32_vec,
 
-#if 0
-       /* No one seems to use this.  */
-       &mips_aout_be_vec,
-#endif
-       &mips_aout_le_vec,
        &mips_ecoff_be_vec,
        &mips_ecoff_le_vec,
        &mips_ecoff_bele_vec,
@@ -1148,8 +1177,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &mips_elf64_tradfbsd_be_vec,
        &mips_elf64_tradfbsd_le_vec,
 #endif
-       &mips_pe_le_vec,
-       &mips_pei_le_vec,
 
 #ifdef BFD64
        &mmix_elf64_vec,
@@ -1172,6 +1199,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &nds32_elf32_linux_be_vec,
        &nds32_elf32_linux_le_vec,
 
+#ifdef BFD64
+       &nfp_elf64_vec,
+#endif
+
        &nios2_elf32_be_vec,
        &nios2_elf32_le_vec,
 
@@ -1188,10 +1219,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &pj_elf32_vec,
        &pj_elf32_le_vec,
 
-#if BFD_SUPPORTS_PLUGINS
-       &plugin_vec,
-#endif
-
        &powerpc_boot_vec,
        &powerpc_elf32_vec,
        &powerpc_elf32_le_vec,
@@ -1256,13 +1283,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &sh_pe_le_vec,
        &sh_pei_le_vec,
 
-       &sparc_aout_le_vec,
-       &sparc_aout_linux_vec,
-       &sparc_aout_lynx_vec,
-       &sparc_aout_nbsd_vec,
-       &sparc_aout_sunos_be_vec,
-       &sparc_coff_vec,
-       &sparc_coff_lynx_vec,
        &sparc_elf32_vec,
        &sparc_elf32_sol2_vec,
        &sparc_elf32_vxworks_vec,
@@ -1351,6 +1371,10 @@ static const bfd_target * const _bfd_target_vector[] =
 /* Likewise for ihex.  */
        &ihex_vec,
 
+#if BFD_SUPPORTS_PLUGINS
+       &plugin_vec,
+#endif
+
 /* Add any required traditional-core-file-handler.  */
 
 #ifdef AIX386_CORE
This page took 0.029321 seconds and 4 git commands to generate.