X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Flibbfd-in.h;h=5d24efbeb269ddb91f425dc14d0db20e0397d509;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=f498ffd5e7a295dac69d25982597e83038e66537;hpb=cb7f4b298e5e0a3ab4fb6b13aa89e970478597bc;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h index f498ffd5e7..5d24efbeb2 100644 --- a/bfd/libbfd-in.h +++ b/bfd/libbfd-in.h @@ -1,7 +1,7 @@ /* libbfd.h -- Declarations used by bfd library *implementation*. (This include file is not for users of the library.) - Copyright (C) 1990-2019 Free Software Foundation, Inc. + Copyright (C) 1990-2020 Free Software Foundation, Inc. Written by Cygnus Support. @@ -116,12 +116,6 @@ 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) @@ -134,10 +128,6 @@ bfd_strdup (const char *str) } /* 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; @@ -151,7 +141,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; @@ -237,8 +227,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; @@ -435,9 +426,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; @@ -456,7 +447,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 @@ -596,7 +587,7 @@ 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 *, void **) ATTRIBUTE_HIDDEN; @@ -905,3 +896,63 @@ 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; +}