X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bfd%2Fxsym.c;h=525d6d98abc1bc385acce6593fb57aca8ae7bde9;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=e0819a9b1a8249854c28b8a4893128a978c6e9a8;hpb=df7b86aa4cb63ce86e60949b8160438bc0f9e389;p=deliverable%2Fbinutils-gdb.git diff --git a/bfd/xsym.c b/bfd/xsym.c index e0819a9b1a..525d6d98ab 100644 --- a/bfd/xsym.c +++ b/bfd/xsym.c @@ -1,6 +1,5 @@ /* xSYM symbol-file support for BFD. - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, - 2009, 2010, 2011, 2012 Free Software Foundation, Inc. + Copyright (C) 1999-2020 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -27,38 +26,43 @@ #include "bfd.h" #include "libbfd.h" -#define bfd_sym_close_and_cleanup _bfd_generic_close_and_cleanup -#define bfd_sym_bfd_free_cached_info _bfd_generic_bfd_free_cached_info -#define bfd_sym_new_section_hook _bfd_generic_new_section_hook -#define bfd_sym_bfd_is_local_label_name bfd_generic_is_local_label_name -#define bfd_sym_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) -#define bfd_sym_get_lineno _bfd_nosymbols_get_lineno -#define bfd_sym_find_nearest_line _bfd_nosymbols_find_nearest_line -#define bfd_sym_find_inliner_info _bfd_nosymbols_find_inliner_info -#define bfd_sym_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol -#define bfd_sym_read_minisymbols _bfd_generic_read_minisymbols -#define bfd_sym_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol -#define bfd_sym_set_arch_mach _bfd_generic_set_arch_mach -#define bfd_sym_get_section_contents _bfd_generic_get_section_contents -#define bfd_sym_set_section_contents _bfd_generic_set_section_contents +#define bfd_sym_close_and_cleanup _bfd_generic_close_and_cleanup +#define bfd_sym_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define bfd_sym_new_section_hook _bfd_generic_new_section_hook +#define bfd_sym_bfd_is_local_label_name bfd_generic_is_local_label_name +#define bfd_sym_bfd_is_target_special_symbol _bfd_bool_bfd_asymbol_false +#define bfd_sym_get_lineno _bfd_nosymbols_get_lineno +#define bfd_sym_find_nearest_line _bfd_nosymbols_find_nearest_line +#define bfd_sym_find_line _bfd_nosymbols_find_line +#define bfd_sym_find_inliner_info _bfd_nosymbols_find_inliner_info +#define bfd_sym_get_symbol_version_string _bfd_nosymbols_get_symbol_version_string +#define bfd_sym_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol +#define bfd_sym_read_minisymbols _bfd_generic_read_minisymbols +#define bfd_sym_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol +#define bfd_sym_set_arch_mach _bfd_generic_set_arch_mach +#define bfd_sym_get_section_contents _bfd_generic_get_section_contents +#define bfd_sym_set_section_contents _bfd_generic_set_section_contents #define bfd_sym_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents -#define bfd_sym_bfd_relax_section bfd_generic_relax_section -#define bfd_sym_bfd_gc_sections bfd_generic_gc_sections -#define bfd_sym_bfd_lookup_section_flags bfd_generic_lookup_section_flags -#define bfd_sym_bfd_merge_sections bfd_generic_merge_sections -#define bfd_sym_bfd_is_group_section bfd_generic_is_group_section -#define bfd_sym_bfd_discard_group bfd_generic_discard_group -#define bfd_sym_section_already_linked _bfd_generic_section_already_linked -#define bfd_sym_bfd_define_common_symbol bfd_generic_define_common_symbol -#define bfd_sym_bfd_link_hash_table_create _bfd_generic_link_hash_table_create -#define bfd_sym_bfd_link_hash_table_free _bfd_generic_link_hash_table_free -#define bfd_sym_bfd_link_add_symbols _bfd_generic_link_add_symbols -#define bfd_sym_bfd_link_just_syms _bfd_generic_link_just_syms +#define bfd_sym_bfd_relax_section bfd_generic_relax_section +#define bfd_sym_bfd_gc_sections bfd_generic_gc_sections +#define bfd_sym_bfd_lookup_section_flags bfd_generic_lookup_section_flags +#define bfd_sym_bfd_merge_sections bfd_generic_merge_sections +#define bfd_sym_bfd_is_group_section bfd_generic_is_group_section +#define bfd_sym_bfd_group_name bfd_generic_group_name +#define bfd_sym_bfd_discard_group bfd_generic_discard_group +#define bfd_sym_section_already_linked _bfd_generic_section_already_linked +#define bfd_sym_bfd_define_common_symbol bfd_generic_define_common_symbol +#define bfd_sym_bfd_link_hide_symbol _bfd_generic_link_hide_symbol +#define bfd_sym_bfd_define_start_stop bfd_generic_define_start_stop +#define bfd_sym_bfd_link_hash_table_create _bfd_generic_link_hash_table_create +#define bfd_sym_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define bfd_sym_bfd_link_just_syms _bfd_generic_link_just_syms #define bfd_sym_bfd_copy_link_hash_symbol_type \ _bfd_generic_copy_link_hash_symbol_type -#define bfd_sym_bfd_final_link _bfd_generic_final_link -#define bfd_sym_bfd_link_split_section _bfd_generic_link_split_section -#define bfd_sym_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_sym_bfd_final_link _bfd_generic_final_link +#define bfd_sym_bfd_link_split_section _bfd_generic_link_split_section +#define bfd_sym_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_sym_bfd_link_check_relocs _bfd_generic_link_check_relocs extern const bfd_target sym_vec; @@ -123,24 +127,12 @@ bfd_sym_valid (bfd *abfd) unsigned char * bfd_sym_read_name_table (bfd *abfd, bfd_sym_header_block *dshb) { - unsigned char *rstr; - long ret; size_t table_size = dshb->dshb_nte.dti_page_count * dshb->dshb_page_size; size_t table_offset = dshb->dshb_nte.dti_first_page * dshb->dshb_page_size; - rstr = bfd_alloc (abfd, table_size); - if (rstr == NULL) - return rstr; - - bfd_seek (abfd, table_offset, SEEK_SET); - ret = bfd_bread (rstr, table_size, abfd); - if (ret < 0 || (unsigned long) ret != table_size) - { - bfd_release (abfd, rstr); - return NULL; - } - - return rstr; + if (bfd_seek (abfd, table_offset, SEEK_SET) != 0) + return FALSE; + return _bfd_alloc_and_read (abfd, table_size, table_size); } void @@ -1804,18 +1796,9 @@ bfd_sym_print_type_information_table_entry (bfd *abfd, fprintf (f, "\n "); - buf = alloca (entry->physical_size); - if (buf == NULL) - { - fprintf (f, "[ERROR]\n"); - return; - } - if (bfd_seek (abfd, entry->offset, SEEK_SET) < 0) - { - fprintf (f, "[ERROR]\n"); - return; - } - if (bfd_bread (buf, entry->physical_size, abfd) != entry->physical_size) + if (bfd_seek (abfd, entry->offset, SEEK_SET) != 0 + || (buf = _bfd_malloc_and_read (abfd, entry->physical_size, + entry->physical_size)) == NULL) { fprintf (f, "[ERROR]\n"); return; @@ -1837,6 +1820,7 @@ bfd_sym_print_type_information_table_entry (bfd *abfd, if (offset != entry->physical_size) fprintf (f, "\n [parser used %lu bytes instead of %lu]", offset, entry->physical_size); + free (buf); } void @@ -2246,35 +2230,29 @@ bfd_sym_scan (bfd *abfd, bfd_sym_version version, bfd_sym_data_struct *mdata) return 0; } -const bfd_target * +bfd_cleanup bfd_sym_object_p (bfd *abfd) { - struct bfd_preserve preserve; bfd_sym_version version = -1; + bfd_sym_data_struct *mdata; - preserve.marker = NULL; bfd_seek (abfd, 0, SEEK_SET); if (bfd_sym_read_version (abfd, &version) != 0) goto wrong; - preserve.marker = bfd_alloc (abfd, sizeof (bfd_sym_data_struct)); - if (preserve.marker == NULL - || ! bfd_preserve_save (abfd, &preserve)) + mdata = (bfd_sym_data_struct *) bfd_alloc (abfd, sizeof (*mdata)); + if (mdata == NULL) goto fail; - if (bfd_sym_scan (abfd, version, - (bfd_sym_data_struct *) preserve.marker) != 0) + if (bfd_sym_scan (abfd, version, mdata) != 0) goto wrong; - bfd_preserve_finish (abfd, &preserve); - return abfd->xvec; + return _bfd_no_cleanup; wrong: bfd_set_error (bfd_error_wrong_format); fail: - if (preserve.marker != NULL) - bfd_preserve_restore (abfd, &preserve); return NULL; } @@ -2333,16 +2311,16 @@ const bfd_target sym_vec = _bfd_dummy_target, }, { /* bfd_set_format. */ - bfd_false, + _bfd_bool_bfd_false_error, bfd_sym_mkobject, - bfd_false, - bfd_false, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, }, { /* bfd_write_contents. */ - bfd_false, - bfd_true, - bfd_false, - bfd_false, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_true, + _bfd_bool_bfd_false_error, + _bfd_bool_bfd_false_error, }, BFD_JUMP_TABLE_GENERIC (bfd_sym),