X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fdwarf2read.c;h=9aa33bfec8f67265282ba668cacdccf0a70a80ed;hb=6eee24ce30f8e95335c2ad8586f9a64398eb2cd4;hp=30bc101f11ce0e8dfca2bdea75541565452a3a24;hpb=8bebfcda34f2ea883fa6b87e748ad8a5f72b352f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 30bc101f11..9aa33bfec8 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -1,6 +1,6 @@ /* DWARF 2 debugging format support for GDB. - Copyright (C) 1994-2018 Free Software Foundation, Inc. + Copyright (C) 1994-2019 Free Software Foundation, Inc. Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, Inc. with support from Florida State University (under contract @@ -536,30 +536,30 @@ struct dwarf2_cu std::vector rust_unions; /* Mark used when releasing cached dies. */ - unsigned int mark : 1; + bool mark : 1; /* This CU references .debug_loc. See the symtab->locations_valid field. This test is imperfect as there may exist optimized debug code not using any location list and still facing inlining issues if handled as unoptimized code. For a future better test see GCC PR other/32998. */ - unsigned int has_loclist : 1; + bool has_loclist : 1; - /* These cache the results for producer_is_* fields. CHECKED_PRODUCER is set + /* These cache the results for producer_is_* fields. CHECKED_PRODUCER is true if all the producer_is_* fields are valid. This information is cached because profiling CU expansion showed excessive time spent in producer_is_gxx_lt_4_6. */ - unsigned int checked_producer : 1; - unsigned int producer_is_gxx_lt_4_6 : 1; - unsigned int producer_is_gcc_lt_4_3 : 1; + bool checked_producer : 1; + bool producer_is_gxx_lt_4_6 : 1; + bool producer_is_gcc_lt_4_3 : 1; bool producer_is_icc : 1; - unsigned int producer_is_icc_lt_14 : 1; + bool producer_is_icc_lt_14 : 1; bool producer_is_codewarrior : 1; - /* When set, the file that we're processing is known to have + /* When true, the file that we're processing is known to have debugging info for C++ namespaces. GCC 3.3.x did not produce this information, but later versions do. */ - unsigned int processing_has_namespace_info : 1; + bool processing_has_namespace_info : 1; struct partial_die_info *find_partial_die (sect_offset sect_off); }; @@ -6299,9 +6299,7 @@ dwarf2_build_psymtabs (struct objfile *objfile) struct dwarf2_per_objfile *dwarf2_per_objfile = get_dwarf2_per_objfile (objfile); - if (objfile->global_psymbols.capacity () == 0 - && objfile->static_psymbols.capacity () == 0) - init_psymbol_list (objfile, 1024); + init_psymbol_list (objfile, 1024); TRY { @@ -6592,13 +6590,7 @@ dwarf2_create_include_psymtab (const char *name, struct partial_symtab *pst, subpst->dependencies[0] = pst; subpst->number_of_dependencies = 1; - subpst->globals_offset = 0; - subpst->n_global_syms = 0; - subpst->statics_offset = 0; - subpst->n_static_syms = 0; - subpst->compunit_symtab = NULL; subpst->read_symtab = pst->read_symtab; - subpst->readin = 0; /* No private part is necessary for include psymtabs. This property can be used to differentiate between such include psymtabs and @@ -7935,9 +7927,7 @@ create_partial_symtab (struct dwarf2_per_cu_data *per_cu, const char *name) struct objfile *objfile = per_cu->dwarf2_per_objfile->objfile; struct partial_symtab *pst; - pst = start_psymtab_common (objfile, name, 0, - objfile->global_psymbols, - objfile->static_psymbols); + pst = start_psymtab_common (objfile, name, 0); pst->psymtabs_addrmap_supported = 1; @@ -8896,7 +8886,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), - &objfile->global_psymbols, + psymbol_placement::GLOBAL, addr, cu->language, objfile); } @@ -8906,7 +8896,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), - &objfile->static_psymbols, + psymbol_placement::STATIC, addr, cu->language, objfile); } @@ -8914,17 +8904,12 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) set_objfile_main_name (objfile, actual_name, cu->language); break; case DW_TAG_constant: - { - std::vector *list; - - if (pdi->is_external) - list = &objfile->global_psymbols; - else - list = &objfile->static_psymbols; - add_psymbol_to_list (actual_name, strlen (actual_name), - built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, - -1, list, 0, cu->language, objfile); - } + add_psymbol_to_list (actual_name, strlen (actual_name), + built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, + -1, (pdi->is_external + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC), + 0, cu->language, objfile); break; case DW_TAG_variable: if (pdi->d.locdesc) @@ -8959,7 +8944,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, SECT_OFF_TEXT (objfile), - &objfile->global_psymbols, + psymbol_placement::GLOBAL, addr, cu->language, objfile); } else @@ -8978,7 +8963,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, VAR_DOMAIN, LOC_STATIC, SECT_OFF_TEXT (objfile), - &objfile->static_psymbols, + psymbol_placement::STATIC, has_loc ? addr : 0, cu->language, objfile); } @@ -8989,7 +8974,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) add_psymbol_to_list (actual_name, strlen (actual_name), built_actual_name != NULL, VAR_DOMAIN, LOC_TYPEDEF, -1, - &objfile->static_psymbols, + psymbol_placement::STATIC, 0, cu->language, objfile); break; case DW_TAG_imported_declaration: @@ -8997,14 +8982,14 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) add_psymbol_to_list (actual_name, strlen (actual_name), built_actual_name != NULL, VAR_DOMAIN, LOC_TYPEDEF, -1, - &objfile->global_psymbols, + psymbol_placement::GLOBAL, 0, cu->language, objfile); break; case DW_TAG_module: add_psymbol_to_list (actual_name, strlen (actual_name), built_actual_name != NULL, MODULE_DOMAIN, LOC_TYPEDEF, -1, - &objfile->global_psymbols, + psymbol_placement::GLOBAL, 0, cu->language, objfile); break; case DW_TAG_class_type: @@ -9029,8 +9014,8 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, STRUCT_DOMAIN, LOC_TYPEDEF, -1, cu->language == language_cplus - ? &objfile->global_psymbols - : &objfile->static_psymbols, + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC, 0, cu->language, objfile); break; @@ -9039,8 +9024,8 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu) built_actual_name != NULL, VAR_DOMAIN, LOC_CONST, -1, cu->language == language_cplus - ? &objfile->global_psymbols - : &objfile->static_psymbols, + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC, 0, cu->language, objfile); break; default: @@ -10648,21 +10633,21 @@ process_die (struct die_info *die, struct dwarf2_cu *cu) case DW_TAG_common_inclusion: break; case DW_TAG_namespace: - cu->processing_has_namespace_info = 1; + cu->processing_has_namespace_info = true; read_namespace (die, cu); break; case DW_TAG_module: - cu->processing_has_namespace_info = 1; + cu->processing_has_namespace_info = true; read_module (die, cu); break; case DW_TAG_imported_declaration: - cu->processing_has_namespace_info = 1; + cu->processing_has_namespace_info = true; if (read_namespace_alias (die, cu)) break; /* The declaration is not a global namespace alias. */ /* Fall through. */ case DW_TAG_imported_module: - cu->processing_has_namespace_info = 1; + cu->processing_has_namespace_info = true; if (die->child != NULL && (die->tag == DW_TAG_imported_declaration || cu->language != language_fortran)) complaint (_("Tag '%s' has unexpected children"), @@ -11361,7 +11346,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu) types, but gives them a size of zero. Starting with version 14, ICC is compatible with GCC. */ -static int +static bool producer_is_icc_lt_14 (struct dwarf2_cu *cu) { if (!cu->checked_producer) @@ -11387,7 +11372,7 @@ producer_is_icc (struct dwarf2_cu *cu) directory paths. GCC SVN r127613 (new option -fdebug-prefix-map) fixed this, it was first present in GCC release 4.3.0. */ -static int +static bool producer_is_gcc_lt_4_3 (struct dwarf2_cu *cu) { if (!cu->checked_producer) @@ -14929,14 +14914,14 @@ check_producer (struct dwarf2_cu *cu) compliant. */ } - cu->checked_producer = 1; + cu->checked_producer = true; } /* Check for GCC PR debug/45124 fix which is not present in any G++ version up to 4.5.any while it is present already in G++ 4.6.0 - the PR has been fixed during 4.6.0 experimental. */ -static int +static bool producer_is_gxx_lt_4_6 (struct dwarf2_cu *cu) { if (!cu->checked_producer) @@ -18448,7 +18433,7 @@ load_partial_dies (const struct die_reader_specs *reader, if (building_psymtab && pdi.name != NULL) add_psymbol_to_list (pdi.name, strlen (pdi.name), 0, VAR_DOMAIN, LOC_TYPEDEF, -1, - &objfile->static_psymbols, + psymbol_placement::STATIC, 0, cu->language, objfile); info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); continue; @@ -18483,8 +18468,8 @@ load_partial_dies (const struct die_reader_specs *reader, add_psymbol_to_list (pdi.name, strlen (pdi.name), 0, VAR_DOMAIN, LOC_CONST, -1, cu->language == language_cplus - ? &objfile->global_psymbols - : &objfile->static_psymbols, + ? psymbol_placement::GLOBAL + : psymbol_placement::STATIC, 0, cu->language, objfile); info_ptr = locate_pdi_sibling (reader, &pdi, info_ptr); @@ -21271,7 +21256,7 @@ dwarf2_start_symtab (struct dwarf2_cu *cu, cu->builder->record_debugformat ("DWARF 2"); cu->builder->record_producer (cu->producer); - cu->processing_has_namespace_info = 0; + cu->processing_has_namespace_info = false; return cu->builder->get_compunit_symtab (); } @@ -21338,7 +21323,7 @@ var_decode_location (struct attribute *attr, struct symbol *sym, dwarf2_symbol_mark_computed (attr, sym, cu, 0); if (SYMBOL_COMPUTED_OPS (sym)->location_has_loclist) - cu->has_loclist = 1; + cu->has_loclist = true; } /* Given a pointer to a DWARF information entry, figure out if we need @@ -25120,7 +25105,6 @@ dwarf2_find_containing_comp_unit (sect_offset sect_off, { struct dwarf2_per_cu_data *this_cu; int low, high; - const sect_offset *cu_off; low = 0; high = dwarf2_per_objfile->all_comp_units.size () - 1; @@ -25130,18 +25114,16 @@ dwarf2_find_containing_comp_unit (sect_offset sect_off, int mid = low + (high - low) / 2; mid_cu = dwarf2_per_objfile->all_comp_units[mid]; - cu_off = &mid_cu->sect_off; if (mid_cu->is_dwz > offset_in_dwz || (mid_cu->is_dwz == offset_in_dwz - && *cu_off + mid_cu->length >= sect_off)) + && mid_cu->sect_off + mid_cu->length >= sect_off)) high = mid; else low = mid + 1; } gdb_assert (low == high); this_cu = dwarf2_per_objfile->all_comp_units[low]; - cu_off = &this_cu->sect_off; - if (this_cu->is_dwz != offset_in_dwz || *cu_off > sect_off) + if (this_cu->is_dwz != offset_in_dwz || this_cu->sect_off > sect_off) { if (low == 0 || this_cu->is_dwz != offset_in_dwz) error (_("Dwarf Error: could not find partial DIE containing " @@ -25168,15 +25150,15 @@ dwarf2_find_containing_comp_unit (sect_offset sect_off, dwarf2_cu::dwarf2_cu (struct dwarf2_per_cu_data *per_cu_) : per_cu (per_cu_), - mark (0), - has_loclist (0), - checked_producer (0), - producer_is_gxx_lt_4_6 (0), - producer_is_gcc_lt_4_3 (0), + mark (false), + has_loclist (false), + checked_producer (false), + producer_is_gxx_lt_4_6 (false), + producer_is_gcc_lt_4_3 (false), producer_is_icc (false), - producer_is_icc_lt_14 (0), + producer_is_icc_lt_14 (false), producer_is_codewarrior (false), - processing_has_namespace_info (0) + processing_has_namespace_info (false) { per_cu->cu = this; } @@ -25509,7 +25491,7 @@ dwarf2_mark_helper (void **slot, void *data) if (per_cu->cu->mark) return 1; - per_cu->cu->mark = 1; + per_cu->cu->mark = true; if (per_cu->cu->dependencies != NULL) htab_traverse (per_cu->cu->dependencies, dwarf2_mark_helper, NULL); @@ -25525,7 +25507,7 @@ dwarf2_mark (struct dwarf2_cu *cu) { if (cu->mark) return; - cu->mark = 1; + cu->mark = true; if (cu->dependencies != NULL) htab_traverse (cu->dependencies, dwarf2_mark_helper, NULL); } @@ -25535,7 +25517,7 @@ dwarf2_clear_marks (struct dwarf2_per_cu_data *per_cu) { while (per_cu) { - per_cu->cu->mark = 0; + per_cu->cu->mark = false; per_cu = per_cu->cu->read_in_chain; } }