Introduce basic_safe_range
[deliverable/binutils-gdb.git] / bfd / targets.c
index 4042f6fb8a98065f42445a441947bfbe5d53b34f..fb0c669e7f7046409a97f16eabdee6671bf3899f 100644 (file)
@@ -1,5 +1,5 @@
 /* Generic target-file-type support for the BFD library.
 /* 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.
    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.  *}
 .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.  *}
 .
 . {* 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_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_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 *);
 .  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 *);
 .
 .  {* 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 *);
 .
 .  {* 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 *);
 .
 .  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 *,
 .  {* 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;
 .
 .
 .} 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).
 */
 
 /* All known xvecs (even those that don't compile on all systems).
@@ -597,14 +674,10 @@ extern const bfd_target am33_elf32_linux_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 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_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;
 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;
@@ -614,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_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_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 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 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;
 extern const bfd_target d10v_elf32_vec;
 extern const bfd_target d30v_elf32_vec;
 extern const bfd_target dlx_elf32_be_vec;
@@ -640,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 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;
 extern const bfd_target epiphany_elf32_vec;
 extern const bfd_target fr30_elf32_vec;
 extern const bfd_target frv_elf32_vec;
@@ -654,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 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_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;
 extern const bfd_target i386_coff_vec;
 extern const bfd_target i386_coff_go32_vec;
 extern const bfd_target i386_coff_go32stubbed_vec;
@@ -698,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 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;
 extern const bfd_target mach_o_be_vec;
 extern const bfd_target mach_o_le_vec;
 extern const bfd_target mach_o_fat_vec;
@@ -712,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 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;
 extern const bfd_target mips_ecoff_be_vec;
 extern const bfd_target mips_ecoff_le_vec;
 extern const bfd_target mips_ecoff_bele_vec;
@@ -737,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_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;
 extern const bfd_target mmix_elf64_vec;
 extern const bfd_target mmix_mmo_vec;
 extern const bfd_target mn10200_elf32_vec;
@@ -752,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 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;
 extern const bfd_target nios2_elf32_be_vec;
 extern const bfd_target nios2_elf32_le_vec;
 extern const bfd_target ns32k_aout_pc532mach_vec;
@@ -786,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_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;
 extern const bfd_target s390_elf32_vec;
 extern const bfd_target s390_elf64_vec;
 extern const bfd_target score_elf32_be_vec;
@@ -939,20 +1004,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &arc_elf32_be_vec,
        &arc_elf32_le_vec,
 
        &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_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,
        &arm_elf32_symbian_be_vec,
        &arm_elf32_symbian_le_vec,
        &arm_elf32_vxworks_be_vec,
@@ -960,14 +1015,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &arm_mach_o_vec,
        &arm_pe_be_vec,
        &arm_pe_le_vec,
        &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_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,
 
        &arm_pei_wince_be_vec,
        &arm_pei_wince_le_vec,
 
@@ -977,7 +1028,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &bfin_elf32_fdpic_vec,
 
        &cr16_elf32_vec,
        &bfin_elf32_fdpic_vec,
 
        &cr16_elf32_vec,
-       &cr16c_elf32_vec,
 
        &cris_aout_vec,
        &cris_elf32_vec,
 
        &cris_aout_vec,
        &cris_elf32_vec,
@@ -985,6 +1035,9 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &crx_elf32_vec,
 
 
        &crx_elf32_vec,
 
+       &csky_elf32_be_vec,
+       &csky_elf32_le_vec,
+
        &d10v_elf32_vec,
        &d30v_elf32_vec,
 
        &d10v_elf32_vec,
        &d30v_elf32_vec,
 
@@ -1022,22 +1075,7 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &i386_aout_vec,
        &i386_aout_bsd_vec,
 
        &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,
        &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,
        &i386_coff_vec,
        &i386_coff_go32_vec,
        &i386_coff_go32stubbed_vec,
@@ -1054,6 +1092,11 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &iamcu_elf32_vec,
 
 
        &iamcu_elf32_vec,
 
+#ifdef BFD64
+       &bpf_elf64_be_vec,
+       &bpf_elf64_le_vec,
+#endif
+
 #ifdef BFD64
 #if 0
        &ia64_elf32_be_vec,
 #ifdef BFD64
 #if 0
        &ia64_elf32_be_vec,
@@ -1090,6 +1133,8 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &m68k_elf32_vec,
 
 
        &m68k_elf32_vec,
 
+       &s12z_elf32_vec,
+
        &mach_o_be_vec,
        &mach_o_le_vec,
        &mach_o_fat_vec,
        &mach_o_be_vec,
        &mach_o_le_vec,
        &mach_o_fat_vec,
@@ -1107,11 +1152,6 @@ static const bfd_target * const _bfd_target_vector[] =
 
        &microblaze_elf32_vec,
 
 
        &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,
        &mips_ecoff_be_vec,
        &mips_ecoff_le_vec,
        &mips_ecoff_bele_vec,
@@ -1137,8 +1177,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &mips_elf64_tradfbsd_be_vec,
        &mips_elf64_tradfbsd_le_vec,
 #endif
        &mips_elf64_tradfbsd_be_vec,
        &mips_elf64_tradfbsd_le_vec,
 #endif
-       &mips_pe_le_vec,
-       &mips_pei_le_vec,
 
 #ifdef BFD64
        &mmix_elf64_vec,
 
 #ifdef BFD64
        &mmix_elf64_vec,
@@ -1161,6 +1199,10 @@ static const bfd_target * const _bfd_target_vector[] =
        &nds32_elf32_linux_be_vec,
        &nds32_elf32_linux_le_vec,
 
        &nds32_elf32_linux_be_vec,
        &nds32_elf32_linux_le_vec,
 
+#ifdef BFD64
+       &nfp_elf64_vec,
+#endif
+
        &nios2_elf32_be_vec,
        &nios2_elf32_le_vec,
 
        &nios2_elf32_be_vec,
        &nios2_elf32_le_vec,
 
@@ -1177,10 +1219,6 @@ static const bfd_target * const _bfd_target_vector[] =
        &pj_elf32_vec,
        &pj_elf32_le_vec,
 
        &pj_elf32_vec,
        &pj_elf32_le_vec,
 
-#if BFD_SUPPORTS_PLUGINS
-       &plugin_vec,
-#endif
-
        &powerpc_boot_vec,
        &powerpc_elf32_vec,
        &powerpc_elf32_le_vec,
        &powerpc_boot_vec,
        &powerpc_elf32_vec,
        &powerpc_elf32_le_vec,
@@ -1333,6 +1371,10 @@ static const bfd_target * const _bfd_target_vector[] =
 /* Likewise for ihex.  */
        &ihex_vec,
 
 /* Likewise for ihex.  */
        &ihex_vec,
 
+#if BFD_SUPPORTS_PLUGINS
+       &plugin_vec,
+#endif
+
 /* Add any required traditional-core-file-handler.  */
 
 #ifdef AIX386_CORE
 /* Add any required traditional-core-file-handler.  */
 
 #ifdef AIX386_CORE
This page took 0.043332 seconds and 4 git commands to generate.