X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=bfd%2Flibbfd.h;h=b97534fc9fed2c850f400dead5d085dd19f70bf1;hb=2106ed9baf1098a5d76469ecde30813065c46c68;hp=d37716c3633fdc29b43c8fef64d7071fff577067;hpb=fbaf61ad525eb2818598b699d44df32e46583925;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/libbfd.h b/bfd/libbfd.h index d37716c363..b97534fc9f 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -6,7 +6,7 @@ /* libbfd.h -- Declarations used by bfd library *implementation*. (This include file is not for users of the library.) - Copyright (C) 1990-2018 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -121,19 +121,18 @@ extern void *bfd_realloc_or_free (void *, bfd_size_type) ATTRIBUTE_HIDDEN; extern void *bfd_zmalloc (bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_malloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_realloc2 - (void *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zmalloc2 - (bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; +static inline char * +bfd_strdup (const char *str) +{ + size_t len = strlen (str) + 1; + char *buf = bfd_malloc (len); + if (buf != NULL) + memcpy (buf, str, len); + return buf; +} /* These routines allocate and free things on the BFD's objalloc. */ -extern void *bfd_alloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; -extern void *bfd_zalloc2 - (bfd *, bfd_size_type, bfd_size_type) ATTRIBUTE_HIDDEN; extern void bfd_release (bfd *, void *) ATTRIBUTE_HIDDEN; @@ -147,7 +146,7 @@ extern bfd_boolean _bfd_generic_mkarchive (bfd *) ATTRIBUTE_HIDDEN; extern char *_bfd_append_relative_path (bfd *, char *) ATTRIBUTE_HIDDEN; -extern const bfd_target *bfd_generic_archive_p +extern bfd_cleanup bfd_generic_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean bfd_slurp_armap (bfd *) ATTRIBUTE_HIDDEN; @@ -233,8 +232,9 @@ extern void _bfd_void_bfd_asection extern bfd *_bfd_new_bfd_contained_in (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_dummy_target +extern bfd_cleanup _bfd_dummy_target (bfd *) ATTRIBUTE_HIDDEN; +#define _bfd_no_cleanup _bfd_void_bfd extern void bfd_dont_truncate_arname (bfd *, const char *, char *) ATTRIBUTE_HIDDEN; @@ -431,9 +431,9 @@ extern symindex _bfd_vms_lib_find_symbol (bfd *, const char *) ATTRIBUTE_HIDDEN; extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_alpha_archive_p +extern bfd_cleanup _bfd_vms_lib_alpha_archive_p (bfd *) ATTRIBUTE_HIDDEN; -extern const bfd_target *_bfd_vms_lib_ia64_archive_p +extern bfd_cleanup _bfd_vms_lib_ia64_archive_p (bfd *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_vms_lib_alpha_mkarchive (bfd *) ATTRIBUTE_HIDDEN; @@ -452,7 +452,7 @@ extern void _bfd_nosymbols_print_symbol extern void _bfd_nosymbols_get_symbol_info (bfd *, asymbol *, symbol_info *) ATTRIBUTE_HIDDEN; extern const char * _bfd_nosymbols_get_symbol_version_string - (bfd *, asymbol *, bfd_boolean *) ATTRIBUTE_HIDDEN; + (bfd *, asymbol *, bfd_boolean, bfd_boolean *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_nosymbols_bfd_is_local_label_name (bfd *, const char *) ATTRIBUTE_HIDDEN; #define _bfd_nosymbols_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false @@ -519,6 +519,8 @@ extern bfd_boolean _bfd_nolink_bfd_lookup_section_flags #define _bfd_nolink_bfd_merge_sections _bfd_bool_bfd_link_false_error extern bfd_boolean _bfd_nolink_bfd_is_group_section (bfd *, const asection *) ATTRIBUTE_HIDDEN; +extern const char *_bfd_nolink_bfd_group_name + (bfd *, const asection *) ATTRIBUTE_HIDDEN; extern bfd_boolean _bfd_nolink_bfd_discard_group (bfd *, asection *) ATTRIBUTE_HIDDEN; extern struct bfd_link_hash_table *_bfd_nolink_bfd_link_hash_table_create @@ -590,10 +592,10 @@ struct dwarf_debug_section extern const struct dwarf_debug_section dwarf_debug_sections[] ATTRIBUTE_HIDDEN; /* Find the nearest line using DWARF 2 debugging information. */ -extern bfd_boolean _bfd_dwarf2_find_nearest_line +extern int _bfd_dwarf2_find_nearest_line (bfd *, asymbol **, asymbol *, asection *, bfd_vma, const char **, const char **, unsigned int *, unsigned int *, - const struct dwarf_debug_section *, unsigned int, void **) ATTRIBUTE_HIDDEN; + const struct dwarf_debug_section *, void **) ATTRIBUTE_HIDDEN; /* Find the bias between DWARF addresses and real addresses. */ extern bfd_signed_vma _bfd_dwarf2_find_symbol_bias @@ -702,8 +704,8 @@ extern bfd_reloc_status_type _bfd_relocate_contents (reloc_howto_type *, bfd *, bfd_vma, bfd_byte *) ATTRIBUTE_HIDDEN; /* Clear a given location using a given howto. */ -extern void _bfd_clear_contents - (reloc_howto_type *, bfd *, asection *, bfd_byte *) ATTRIBUTE_HIDDEN; +extern bfd_reloc_status_type _bfd_clear_contents + (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma) ATTRIBUTE_HIDDEN; /* Link stabs in sections in the first pass. */ @@ -899,6 +901,66 @@ extern bfd_signed_vma _bfd_read_signed_leb128 extern bfd_vma _bfd_safe_read_leb128 (bfd *, bfd_byte *, unsigned int *, bfd_boolean, const bfd_byte * const) ATTRIBUTE_HIDDEN; + +#if GCC_VERSION >= 7000 +#define _bfd_mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res) +#else +/* Assumes unsigned values. Careful! Args evaluated multiple times. */ +#define _bfd_mul_overflow(a, b, res) \ + ((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a)) +#endif + +#ifdef __GNUC__ +#define _bfd_constant_p(v) __builtin_constant_p (v) +#else +#define _bfd_constant_p(v) 0 +#endif + +static inline bfd_byte * +_bfd_alloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_alloc (abfd, asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + bfd_release (abfd, mem); + } + return NULL; +} + +static inline bfd_byte * +_bfd_malloc_and_read (bfd *abfd, bfd_size_type asize, bfd_size_type rsize) +{ + bfd_byte *mem; + if (!_bfd_constant_p (rsize)) + { + ufile_ptr filesize = bfd_get_file_size (abfd); + if (filesize != 0 && rsize > filesize) + { + bfd_set_error (bfd_error_file_truncated); + return NULL; + } + } + mem = bfd_malloc (asize); + if (mem != NULL) + { + if (bfd_bread (mem, rsize, abfd) == rsize) + return mem; + free (mem); + } + return NULL; +} /* Extracted from libbfd.c. */ bfd_boolean bfd_write_bigendian_4byte_int (bfd *, unsigned int); @@ -1476,6 +1538,23 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_PPC64_ADDR64_LOCAL", "BFD_RELOC_PPC64_ENTRY", "BFD_RELOC_PPC64_REL24_NOTOC", + "BFD_RELOC_PPC64_D34", + "BFD_RELOC_PPC64_D34_LO", + "BFD_RELOC_PPC64_D34_HI30", + "BFD_RELOC_PPC64_D34_HA30", + "BFD_RELOC_PPC64_PCREL34", + "BFD_RELOC_PPC64_GOT_PCREL34", + "BFD_RELOC_PPC64_PLT_PCREL34", + "BFD_RELOC_PPC64_ADDR16_HIGHER34", + "BFD_RELOC_PPC64_ADDR16_HIGHERA34", + "BFD_RELOC_PPC64_ADDR16_HIGHEST34", + "BFD_RELOC_PPC64_ADDR16_HIGHESTA34", + "BFD_RELOC_PPC64_REL16_HIGHER34", + "BFD_RELOC_PPC64_REL16_HIGHERA34", + "BFD_RELOC_PPC64_REL16_HIGHEST34", + "BFD_RELOC_PPC64_REL16_HIGHESTA34", + "BFD_RELOC_PPC64_D28", + "BFD_RELOC_PPC64_PCREL28", "BFD_RELOC_PPC_TLS", "BFD_RELOC_PPC_TLSGD", "BFD_RELOC_PPC_TLSLD", @@ -1508,20 +1587,27 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_PPC_GOT_DTPREL16_HA", "BFD_RELOC_PPC64_TPREL16_DS", "BFD_RELOC_PPC64_TPREL16_LO_DS", + "BFD_RELOC_PPC64_TPREL16_HIGH", + "BFD_RELOC_PPC64_TPREL16_HIGHA", "BFD_RELOC_PPC64_TPREL16_HIGHER", "BFD_RELOC_PPC64_TPREL16_HIGHERA", "BFD_RELOC_PPC64_TPREL16_HIGHEST", "BFD_RELOC_PPC64_TPREL16_HIGHESTA", "BFD_RELOC_PPC64_DTPREL16_DS", "BFD_RELOC_PPC64_DTPREL16_LO_DS", + "BFD_RELOC_PPC64_DTPREL16_HIGH", + "BFD_RELOC_PPC64_DTPREL16_HIGHA", "BFD_RELOC_PPC64_DTPREL16_HIGHER", "BFD_RELOC_PPC64_DTPREL16_HIGHERA", "BFD_RELOC_PPC64_DTPREL16_HIGHEST", "BFD_RELOC_PPC64_DTPREL16_HIGHESTA", - "BFD_RELOC_PPC64_TPREL16_HIGH", - "BFD_RELOC_PPC64_TPREL16_HIGHA", - "BFD_RELOC_PPC64_DTPREL16_HIGH", - "BFD_RELOC_PPC64_DTPREL16_HIGHA", + "BFD_RELOC_PPC64_TPREL34", + "BFD_RELOC_PPC64_DTPREL34", + "BFD_RELOC_PPC64_GOT_TLSGD_PCREL34", + "BFD_RELOC_PPC64_GOT_TLSLD_PCREL34", + "BFD_RELOC_PPC64_GOT_TPREL_PCREL34", + "BFD_RELOC_PPC64_GOT_DTPREL_PCREL34", + "BFD_RELOC_PPC64_TLS_PCREL", "BFD_RELOC_I370_D12", "BFD_RELOC_CTOR", "BFD_RELOC_ARM_PCREL_BRANCH", @@ -1529,6 +1615,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_THUMB_PCREL_BLX", "BFD_RELOC_ARM_PCREL_CALL", "BFD_RELOC_ARM_PCREL_JUMP", + "BFD_RELOC_THUMB_PCREL_BRANCH5", + "BFD_RELOC_THUMB_PCREL_BFCSEL", + "BFD_RELOC_ARM_THUMB_BF17", + "BFD_RELOC_ARM_THUMB_BF13", + "BFD_RELOC_ARM_THUMB_BF19", + "BFD_RELOC_ARM_THUMB_LOOP12", "BFD_RELOC_THUMB_PCREL_BRANCH7", "BFD_RELOC_THUMB_PCREL_BRANCH9", "BFD_RELOC_THUMB_PCREL_BRANCH12", @@ -1628,6 +1720,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ARM_CP_OFF_IMM_S2", "BFD_RELOC_ARM_T32_CP_OFF_IMM", "BFD_RELOC_ARM_T32_CP_OFF_IMM_S2", + "BFD_RELOC_ARM_T32_VLDR_VSTR_OFF_IMM", "BFD_RELOC_ARM_ADR_IMM", "BFD_RELOC_ARM_LDR_IMM", "BFD_RELOC_ARM_LITERAL", @@ -2537,46 +2630,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_M68HC12_LO8XG", "BFD_RELOC_M68HC12_HI8XG", "BFD_RELOC_S12Z_15_PCREL", - "BFD_RELOC_16C_NUM08", - "BFD_RELOC_16C_NUM08_C", - "BFD_RELOC_16C_NUM16", - "BFD_RELOC_16C_NUM16_C", - "BFD_RELOC_16C_NUM32", - "BFD_RELOC_16C_NUM32_C", - "BFD_RELOC_16C_DISP04", - "BFD_RELOC_16C_DISP04_C", - "BFD_RELOC_16C_DISP08", - "BFD_RELOC_16C_DISP08_C", - "BFD_RELOC_16C_DISP16", - "BFD_RELOC_16C_DISP16_C", - "BFD_RELOC_16C_DISP24", - "BFD_RELOC_16C_DISP24_C", - "BFD_RELOC_16C_DISP24a", - "BFD_RELOC_16C_DISP24a_C", - "BFD_RELOC_16C_REG04", - "BFD_RELOC_16C_REG04_C", - "BFD_RELOC_16C_REG04a", - "BFD_RELOC_16C_REG04a_C", - "BFD_RELOC_16C_REG14", - "BFD_RELOC_16C_REG14_C", - "BFD_RELOC_16C_REG16", - "BFD_RELOC_16C_REG16_C", - "BFD_RELOC_16C_REG20", - "BFD_RELOC_16C_REG20_C", - "BFD_RELOC_16C_ABS20", - "BFD_RELOC_16C_ABS20_C", - "BFD_RELOC_16C_ABS24", - "BFD_RELOC_16C_ABS24_C", - "BFD_RELOC_16C_IMM04", - "BFD_RELOC_16C_IMM04_C", - "BFD_RELOC_16C_IMM16", - "BFD_RELOC_16C_IMM16_C", - "BFD_RELOC_16C_IMM20", - "BFD_RELOC_16C_IMM20_C", - "BFD_RELOC_16C_IMM24", - "BFD_RELOC_16C_IMM24_C", - "BFD_RELOC_16C_IMM32", - "BFD_RELOC_16C_IMM32_C", "BFD_RELOC_CR16_NUM8", "BFD_RELOC_CR16_NUM16", "BFD_RELOC_CR16_NUM32", @@ -2664,26 +2717,41 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_CRIS_DTPMOD", "BFD_RELOC_CRIS_32_IE", "BFD_RELOC_OR1K_REL_26", + "BFD_RELOC_OR1K_SLO16", + "BFD_RELOC_OR1K_PCREL_PG21", + "BFD_RELOC_OR1K_LO13", + "BFD_RELOC_OR1K_SLO13", "BFD_RELOC_OR1K_GOTPC_HI16", "BFD_RELOC_OR1K_GOTPC_LO16", "BFD_RELOC_OR1K_GOT16", + "BFD_RELOC_OR1K_GOT_PG21", + "BFD_RELOC_OR1K_GOT_LO13", "BFD_RELOC_OR1K_PLT26", - "BFD_RELOC_OR1K_GOTOFF_HI16", - "BFD_RELOC_OR1K_GOTOFF_LO16", + "BFD_RELOC_OR1K_PLTA26", + "BFD_RELOC_OR1K_GOTOFF_SLO16", "BFD_RELOC_OR1K_COPY", "BFD_RELOC_OR1K_GLOB_DAT", "BFD_RELOC_OR1K_JMP_SLOT", "BFD_RELOC_OR1K_RELATIVE", "BFD_RELOC_OR1K_TLS_GD_HI16", "BFD_RELOC_OR1K_TLS_GD_LO16", + "BFD_RELOC_OR1K_TLS_GD_PG21", + "BFD_RELOC_OR1K_TLS_GD_LO13", "BFD_RELOC_OR1K_TLS_LDM_HI16", "BFD_RELOC_OR1K_TLS_LDM_LO16", + "BFD_RELOC_OR1K_TLS_LDM_PG21", + "BFD_RELOC_OR1K_TLS_LDM_LO13", "BFD_RELOC_OR1K_TLS_LDO_HI16", "BFD_RELOC_OR1K_TLS_LDO_LO16", "BFD_RELOC_OR1K_TLS_IE_HI16", + "BFD_RELOC_OR1K_TLS_IE_AHI16", "BFD_RELOC_OR1K_TLS_IE_LO16", + "BFD_RELOC_OR1K_TLS_IE_PG21", + "BFD_RELOC_OR1K_TLS_IE_LO13", "BFD_RELOC_OR1K_TLS_LE_HI16", + "BFD_RELOC_OR1K_TLS_LE_AHI16", "BFD_RELOC_OR1K_TLS_LE_LO16", + "BFD_RELOC_OR1K_TLS_LE_SLO16", "BFD_RELOC_OR1K_TLS_TPOFF", "BFD_RELOC_OR1K_TLS_DTPOFF", "BFD_RELOC_OR1K_TLS_DTPMOD", @@ -2851,7 +2919,20 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_XTENSA_TLS_FUNC", "BFD_RELOC_XTENSA_TLS_ARG", "BFD_RELOC_XTENSA_TLS_CALL", + "BFD_RELOC_XTENSA_PDIFF8", + "BFD_RELOC_XTENSA_PDIFF16", + "BFD_RELOC_XTENSA_PDIFF32", + "BFD_RELOC_XTENSA_NDIFF8", + "BFD_RELOC_XTENSA_NDIFF16", + "BFD_RELOC_XTENSA_NDIFF32", "BFD_RELOC_Z80_DISP8", + "BFD_RELOC_Z80_BYTE0", + "BFD_RELOC_Z80_BYTE1", + "BFD_RELOC_Z80_BYTE2", + "BFD_RELOC_Z80_BYTE3", + "BFD_RELOC_Z80_WORD0", + "BFD_RELOC_Z80_WORD1", + "BFD_RELOC_Z80_16_BE", "BFD_RELOC_Z8K_DISP7", "BFD_RELOC_Z8K_CALLR", "BFD_RELOC_Z8K_IMM4L", @@ -3216,6 +3297,11 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD", "BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD", "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD", + "BFD_RELOC_BPF_64", + "BFD_RELOC_BPF_32", + "BFD_RELOC_BPF_16", + "BFD_RELOC_BPF_DISP16", + "BFD_RELOC_BPF_DISP32", "BFD_RELOC_EPIPHANY_SIMM8", "BFD_RELOC_EPIPHANY_SIMM24", "BFD_RELOC_EPIPHANY_HIGH", @@ -3305,6 +3391,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_CKCORE_IRELATIVE", "BFD_RELOC_CKCORE_PCREL_BLOOP_IMM4BY4", "BFD_RELOC_CKCORE_PCREL_BLOOP_IMM12BY4", + "BFD_RELOC_S12Z_OPR", "@@overflow: BFD_RELOC_UNUSED@@", }; #endif