Lines Matching defs:rdr
233 build_translation_unit_and_add_to_ir(reader& rdr,
238 maybe_propagate_canonical_type(const reader& rdr,
243 propagate_canonical_type(const reader& rdr,
367 get_parent_die(const reader& rdr,
373 get_scope_die(const reader& rdr,
456 die_is_at_class_scope(const reader& rdr,
498 die_location(const reader& rdr, const Dwarf_Die* die);
523 die_qualified_type_name(const reader& rdr,
528 die_qualified_decl_name(const reader& rdr,
533 die_qualified_name(const reader& rdr,
538 die_qualified_type_name_empty(const reader& rdr,
543 die_return_and_parm_names_from_fn_type_die(const reader& rdr,
554 die_function_signature(const reader& rdr,
562 die_function_type_is_method_type(const reader& rdr,
570 die_pretty_print_type(reader& rdr,
575 die_pretty_print_decl(reader& rdr,
580 die_pretty_print(reader& rdr,
586 reader& rdr);
597 build_subrange_type(reader& rdr,
603 build_subranges_from_array_type_die(reader& rdr,
610 compare_dies(const reader& rdr,
615 compare_dies_during_canonicalization(reader& rdr,
1741 /// @param rdr the DWARF reader to consider.
1749 get_container(const reader& rdr, const Dwarf_Die *die)
1751 const die_source source = rdr.get_die_source(die);
1758 /// @param rdr the DWARF reader to consider.
1766 get_container(const reader& rdr, const Dwarf_Die *die) const
1769 get_container(rdr, die);
3018 reader& rdr = *const_cast<reader*>(this);
3019 string qualified_name = die_qualified_name(rdr, die, where_offset);
3083 reader& rdr = *const_cast<reader*>(this);
3097 die_qualified_type_name(rdr, die, where_offset);
3137 reader& rdr = *const_cast<reader*>(this);
3139 die_pretty_print_type(rdr, die, where_offset);
3174 reader& rdr = *const_cast<reader*>(this);
3176 die_pretty_print(rdr, die, where_offset);
5434 offset_pairs_stack_type(const reader& rdr)
5435 : rdr_ (rdr)
5750 build_ir_node_from_die(reader& rdr,
5759 build_ir_node_from_die(reader& rdr,
5765 add_or_update_class_type(reader& rdr,
5775 add_or_update_union_type(reader& rdr,
5784 build_ir_node_for_void_type(reader& rdr);
5787 build_ir_node_for_variadic_parameter_type(reader &rdr);
5790 build_function_decl(reader& rdr,
5796 function_is_suppressed(const reader& rdr,
5802 build_or_get_fn_decl_if_not_suppressed(reader& rdr,
5810 build_var_decl(reader& rdr,
5816 build_or_get_var_decl_if_not_suppressed(reader& rdr,
5823 variable_is_suppressed(const reader& rdr,
5832 reader& rdr);
6182 /// @param rdr the @ref reader to use.
6188 die_location(const reader& rdr, const Dwarf_Die* die)
6199 translation_unit_sptr tu = rdr.cur_transl_unit();
6220 /// @param rdr the DWARF reader to use.
6230 die_loc_and_name(const reader& rdr,
6236 loc = die_location(rdr, die);
6352 die_is_effectively_public_decl(const reader& rdr,
6364 if (!get_parent_die(rdr, die, parent_die, where_offset))
6604 /// @param rdr the context to consider.
6612 maybe_cache_type_comparison_result(const reader& rdr,
6622 rdr.die_comparison_results_[p] = result;
6630 /// @param rdr the context to consider.
6642 get_cached_type_comparison_result(const reader& rdr,
6646 auto i = rdr.die_comparison_results_.find(p);
6647 if (i != rdr.die_comparison_results_.end())
6658 /// @param rdr the context to consider.
6670 maybe_get_cached_type_comparison_result(const reader& rdr,
6680 if (get_cached_type_comparison_result(rdr, p, result))
7080 /// @param rdr the DWARF reader to use.
7094 die_is_at_class_scope(const reader& rdr,
7099 if (!get_scope_die(rdr, die, where_offset, class_scope_die))
7234 /// @param rdr the DWARF reader.
7255 die_function_type_is_method_type(const reader& rdr,
7283 if (die_is_at_class_scope(rdr, &spec_or_origin_die,
7296 if (die_is_at_class_scope(rdr, die, where_offset, class_die))
8647 /// @param rdr the DWARF reader to consider.
8654 die_member_offset(const reader& rdr,
8695 rdr.dwarf_expr_eval_ctxt()))
8712 bool is_big_endian = architecture_is_big_endian(rdr.elf_handle());
8908 /// @param rdr the DWARF reader.
8917 die_qualified_type_name(const reader& rdr,
8933 if (!get_scope_die(rdr, die, where_offset, scope_die))
8936 string parent_name = die_qualified_name(rdr, &scope_die, where_offset);
9019 die_qualified_type_name(rdr, &underlying_type_die, where_offset);
9052 die_qualified_type_name(rdr, &pointed_to_type_die, where_offset);
9082 build_subrange_type(const_cast<reader&>(rdr),
9095 die_qualified_type_name(rdr, &element_type_die, where_offset);
9100 build_subranges_from_array_type_die(const_cast<reader&>(rdr),
9118 die_return_and_parm_names_from_fn_type_die(rdr, die, where_offset,
9168 /// @param rdr the DWARF reader.
9176 die_qualified_decl_name(const reader& rdr,
9186 if (!get_scope_die(rdr, die, where_offset, scope_die))
9189 string scope_name = die_qualified_name(rdr, &scope_die, where_offset);
9203 repr = die_function_signature(rdr, die, where_offset);
9229 /// @param rdr the DWARF reader.
9237 die_qualified_name(const reader& rdr, const Dwarf_Die* die, size_t where)
9240 return die_qualified_type_name(rdr, die, where);
9242 return die_qualified_decl_name(rdr, die, where);
9253 /// @param rdr the DWARF reader.
9264 die_qualified_type_name_empty(const reader& rdr,
9287 die_qualified_type_name(rdr, &underlying_type_die, where);
9294 string name = die_qualified_type_name(rdr, die, where);
9299 qname = die_qualified_type_name(rdr, die, where);
9317 /// @param rdr the DWARF reader.
9343 die_return_and_parm_names_from_fn_type_die(const reader& rdr,
9360 ? rdr.get_die_pretty_representation(&ret_type_die, where_offset)
9361 : rdr.get_die_qualified_type_name(&ret_type_die, where_offset);
9368 die_function_type_is_method_type(rdr, die, where_offset,
9375 class_name = rdr.get_die_qualified_type_name(&class_die, where_offset);
9406 ? rdr.get_die_pretty_representation(&parm_type_die, where_offset)
9407 : rdr.get_die_qualified_type_name(&parm_type_die, where_offset);
9431 if (get_parent_die(rdr, die, parent_die, where_offset))
9435 rdr.get_die_qualified_type_name(&parent_die, where_offset);
9443 /// @param rdr the DWARF reader.
9452 die_function_signature(const reader& rdr,
9459 if ((has_lang = rdr.get_die_language(fn_die, lang)))
9482 return_type_name = rdr.get_die_qualified_type_name(&ret_type_die,
9490 if (get_scope_die(rdr, fn_die, where_offset, scope_die))
9491 scope_name = rdr.get_die_qualified_name(&scope_die, where_offset);
9501 die_return_and_parm_names_from_fn_type_die(rdr, fn_die, where_offset,
9556 /// @param rdr the context to use.
9566 die_pretty_print_type(reader& rdr,
9596 repr = "namespace " + rdr.get_die_qualified_type_name(die, where_offset);
9600 repr = rdr.get_die_qualified_type_name(die, where_offset);
9606 if (!die_qualified_type_name_empty(rdr, die,
9619 repr = rdr.get_die_qualified_type_name(die, where_offset);
9625 rdr.get_die_qualified_type_name(die, where_offset);
9634 rdr.get_die_qualified_type_name(die, where_offset);
9642 rdr.get_die_qualified_type_name(die, where_offset);
9653 rdr.get_die_qualified_type_name(&element_type_die, where_offset);
9658 build_subranges_from_array_type_die(rdr, die, subranges, where_offset,
9676 repr += die_qualified_type_name(rdr, die, where_offset);
9689 die_return_and_parm_names_from_fn_type_die(rdr, die, where_offset,
9698 repr += " " + rdr.get_die_qualified_type_name(die, where_offset);
9723 /// @param rdr the context to use.
9733 die_pretty_print_decl(reader& rdr,
9746 repr = "namespace " + die_qualified_name(rdr, die, where_offset);
9755 type_repr = die_qualified_type_name(rdr, &type_die, where_offset);
9756 repr = die_qualified_name(rdr, die, where_offset);
9763 repr = die_function_signature(rdr, die, where_offset);
9781 /// @param rdr the DWARF reader.
9789 die_pretty_print(reader& rdr, const Dwarf_Die* die, size_t where_offset)
9792 return die_pretty_print_type(rdr, die, where_offset);
9794 return die_pretty_print_decl(rdr, die, where_offset);
9858 /// @param rdr the DWARF reader to consider.
9867 at_least_one_decl_only_among_odr_relevant_dies(const reader &rdr,
9871 if (!(rdr.odr_is_relevant(l) && rdr.odr_is_relevant(r)))
9894 /// @param rdr the DWARF reader to consider.
9902 compare_as_type_dies(const reader& rdr,
9921 if (at_least_one_decl_only_among_odr_relevant_dies(rdr, l, r))
9936 /// @param rdr the DWARF reader to consider.
9945 compare_as_decl_and_type_dies(const reader &rdr,
9950 || !compare_as_type_dies(rdr, l, r))
9965 /// @param rdr the @ref reader to consider.
9974 fn_die_equal_by_linkage_name(const reader &rdr,
9993 if (rdr.die_is_in_c_or_cplusplus(l)
9994 && rdr.die_is_in_c_or_cplusplus(r))
10015 /// @param rdr the DWARF reader.
10038 try_canonical_die_comparison(const reader& rdr,
10048 if (rdr.debug_die_canonicalization_is_on_
10049 && !rdr.use_canonical_die_comparison_)
10056 rdr.get_canonical_die_offset(l_offset, l_die_source,
10061 rdr.get_canonical_die_offset(r_offset, r_die_source,
10268 /// @param rdr the current context to consider.
10276 maybe_propagate_canonical_type(const reader& rdr,
10287 propagate_canonical_type(rdr, l, r);
10297 /// @param rdr the current context to consider.
10305 propagate_canonical_type(const reader& rdr,
10316 const die_source l_source = rdr.get_die_source(l);
10317 const die_source r_source = rdr.get_die_source(r);
10328 rdr.get_canonical_die_offset(l_offset, l_source,
10333 rdr.get_canonical_die_offset(r_offset, r_source,
10343 rdr.compute_canonical_die_offset(r, r_canonical_die_offset,
10346 rdr.set_canonical_die_offset(l, r_canonical_die_offset,
10349 rdr.propagated_types_.insert(std::make_pair(l_off,r_off));
10350 rdr.canonical_propagated_count_++;
10532 /// @param rdr the DWARF reader used to load the DWARF information.
10554 compare_dies(const reader& rdr,
10562 const die_source l_die_source = rdr.get_die_source(l);
10563 const die_source r_die_source = rdr.get_die_source(r);
10588 if (rdr.leverage_dwarf_factorization()
10595 if (maybe_get_cached_type_comparison_result(rdr, l_tag,
10608 if (try_canonical_die_comparison(rdr, l_offset, r_offset,
10633 if (!compare_as_decl_and_type_dies(rdr, l, r))
10645 if (!compare_as_type_dies(rdr, l, r))
10682 result = compare_dies(rdr, &lu_type_die, &ru_type_die,
10689 if (!compare_as_decl_and_type_dies(rdr, l, r))
10697 if (!at_least_one_decl_only_among_odr_relevant_dies(rdr, l, r))
10740 rdr.compare_count_++;
10742 if (!compare_as_decl_and_type_dies(rdr, l, r))
10744 else if (rdr.options().assume_odr_for_cplusplus
10745 && rdr.odr_is_relevant(l)
10746 && rdr.odr_is_relevant(r)
10757 if (!at_least_one_decl_only_among_odr_relevant_dies(rdr, l, r))
10781 compare_dies(rdr, &l_member, &r_member,
10817 rdr.compare_count_++;
10834 result = compare_dies(rdr, &l_child, &r_child,
10852 result = compare_dies(rdr, <ype_die, &rtype_die,
10902 rdr.compare_count_++;
10905 && !fn_die_equal_by_linkage_name(rdr, l, r))
10911 && rdr.die_is_in_c(l) && rdr.die_is_in_c(r)
10912 /*&& fn_die_equal_by_linkage_name(rdr, l, r)*/)
10917 else if (!rdr.die_is_in_c(l) && !rdr.die_is_in_c(r))
10930 && !compare_dies(rdr,
10957 compare_dies(rdr, &l_child, &r_child,
10999 compare_dies(rdr, &l_type, &r_type,
11015 die_member_offset(rdr, l, l_offset_in_bits);
11016 die_member_offset(rdr, r, r_offset_in_bits);
11027 compare_dies(rdr, &l_type, &r_type,
11042 result = compare_dies(rdr, &l_type, &r_type,
11060 die_member_offset(rdr, l, l_offset_in_bits);
11061 die_member_offset(rdr, r, r_offset_in_bits);
11077 result = compare_dies(rdr, &l_type, &r_type,
11085 result = compare_dies(rdr, &l_type, &r_type,
11144 if (rdr.debug_die_canonicalization_is_on_)
11156 /// @param rdr the DWARF reader used to load the DWARF information.
11171 compare_dies(const reader& rdr,
11176 offset_pairs_stack_type aggregates_being_compared(rdr);
11177 return compare_dies(rdr, l, r, aggregates_being_compared,
11189 /// @param rdr the DWARF reader.
11200 compare_dies_during_canonicalization(reader& rdr,
11206 if (rdr.debug_die_canonicalization_is_on_)
11209 rdr.use_canonical_die_comparison_ = false;
11210 structural_equality = compare_dies(rdr, l, r,
11212 rdr.use_canonical_die_comparison_ = true;
11213 canonical_equality = compare_dies(rdr, l, r,
11223 << rdr.get_die_pretty_type_representation(l, 0)
11231 return compare_dies(rdr, l, r,
11242 /// @param rdr the dwarf reader to consider.
11274 find_import_unit_point_between_dies(const reader& rdr,
11283 rdr.tu_die_imported_unit_points_map(source);
11317 if (find_import_unit_point_between_dies(rdr,
11338 if (find_import_unit_point_between_dies(rdr,
11359 /// @param rdr the dwarf reader to consider.
11377 find_import_unit_point_before_die(const reader& rdr,
11385 if (dwarf_child(const_cast<Dwarf_Die*>(rdr.cur_tu_die()),
11395 if (find_import_unit_point_between_dies(rdr, partial_unit_offset,
11421 /// @param rdr the DWARF reader to consider.
11436 get_parent_die(const reader& rdr,
11441 ABG_ASSERT(rdr.dwarf_debug_info());
11443 const die_source source = rdr.get_die_source(die);
11445 const offset_offset_map_type& m = rdr.die_parent_map(source);
11455 ABG_ASSERT(dwarf_offdie(const_cast<Dwarf*>(rdr.dwarf_debug_info()),
11459 ABG_ASSERT(dwarf_offdie(const_cast<Dwarf*>(rdr.alternate_dwarf_debug_info()),
11463 ABG_ASSERT(dwarf_offdie_types(const_cast<Dwarf*>(rdr.dwarf_debug_info()),
11475 parent_die = *rdr.cur_tu_die();
11480 find_import_unit_point_before_die(rdr,
11489 parent_die = *rdr.cur_tu_die();
11494 ABG_ASSERT(dwarf_offdie(const_cast<Dwarf*>(rdr.dwarf_debug_info()),
11497 return get_parent_die(rdr, &import_point_die,
11516 /// @param rdr the DWARF reader to use.
11525 get_scope_die(const reader& rdr,
11530 if (is_c_language(rdr.cur_transl_unit()->get_language()))
11541 return get_scope_die(rdr, &logical_parent_die, where_offset, scope_die);
11543 if (!get_parent_die(rdr, die, scope_die, where_offset))
11549 return get_scope_die(rdr, &scope_die, where_offset, scope_die);
11564 /// @param rdr the dwarf reader to use.
11576 get_scope_for_die(reader& rdr,
11581 const die_source source_of_die = rdr.get_die_source(die);
11584 rdr.get_die_language(die, die_lang);
11586 || rdr.die_parent_map(source_of_die).empty())
11592 return rdr.global_scope();
11598 return get_scope_for_die(rdr, &cloned_die,
11604 if (!get_parent_die(rdr, die, parent_die, where_offset))
11605 return rdr.nil_scope();
11616 return rdr.cur_transl_unit()->get_global_scope();
11626 rdr.die_tu_map().find(dwarf_dieoffset(&parent_die));
11627 if (i != rdr.die_tu_map().end())
11629 return rdr.cur_transl_unit()->get_global_scope();
11647 scope_decl_sptr s = get_scope_for_die(rdr, &parent_die,
11657 if (!get_parent_die(rdr, &parent_die, parent_die, where_offset))
11658 return rdr.nil_scope();
11659 s = get_scope_for_die(rdr, &parent_die,
11666 d = build_ir_node_from_die(rdr, &parent_die,
11673 return rdr.nil_scope();
11888 /// @param rdr the DWARF reader to use.
11897 build_translation_unit_and_add_to_ir(reader& rdr,
11909 rdr.clear_per_translation_unit_data();
11911 rdr.cur_tu_die(die);
11936 result = rdr.corpus()->find_translation_unit(abs_path);
11941 result.reset(new translation_unit(rdr.env(),
11945 rdr.corpus()->add(result);
11951 rdr.cur_transl_unit(result);
11952 rdr.die_tu_map()[dwarf_dieoffset(die)] = result;
11963 if (!rdr.env().analyze_exported_interfaces_only()
11964 || rdr.is_decl_die_with_exported_symbol(&child))
11965 build_ir_node_from_die(rdr, &child,
11970 if (!rdr.var_decls_to_re_add_to_tree().empty())
11972 rdr.var_decls_to_re_add_to_tree().begin();
11973 v != rdr.var_decls_to_re_add_to_tree().end();
11994 lookup_class_type(ty_name, *rdr.cur_transl_unit());
12024 rdr.var_decls_to_re_add_to_tree().clear();
12038 /// @param rdr the DWARF reader to use.
12051 build_namespace_decl_and_add_to_ir(reader& rdr,
12064 scope_decl_sptr scope = get_scope_for_die(rdr, die,
12070 die_loc_and_name(rdr, die, loc, name, linkage_name);
12072 result.reset(new namespace_decl(rdr.env(), name, loc));
12074 rdr.associate_die_to_decl(die, result, where_offset);
12080 rdr.scope_stack().push(result.get());
12082 build_ir_node_from_die(rdr, &child,
12091 rdr.scope_stack().pop();
12098 /// @param rdr the DWARF reader to use.
12106 build_type_decl(reader& rdr, Dwarf_Die* die, size_t where_offset)
12125 die_loc_and_name(rdr, die, loc, type_name, linkage_name);
12132 result = is_type_decl(build_ir_node_for_void_type(rdr));
12139 if (corpus_sptr corp = rdr.should_reuse_type_from_corpus_group())
12149 if (corpus_sptr corp = rdr.corpus())
12152 result.reset(new type_decl(rdr.env(), type_name, bit_size,
12154 rdr.associate_die_to_type(die, result, where_offset);
12161 /// @param rdr the DWARF reader to use.
12172 build_enum_underlying_type(reader& rdr,
12181 type_decl_sptr result(new type_decl(rdr.env(), underlying_type_name,
12185 translation_unit_sptr tu = rdr.cur_transl_unit();
12195 /// @param rdr the DWARF reader to use.
12208 build_enum_type(reader& rdr,
12224 die_loc_and_name(rdr, die, loc, name, linkage_name);
12239 bool use_odr = rdr.odr_is_relevant(die);
12250 is_enum_type(rdr.lookup_artifact_from_die(die)))
12253 else if (corpus_sptr corp = rdr.should_reuse_type_from_corpus_group())
12261 is_enum_type(rdr.lookup_artifact_from_die(die)))
12268 rdr.associate_die_to_type(die, result, where_offset);
12294 die_loc_and_name(rdr, &child, l, n, m);
12307 build_enum_underlying_type(rdr, name, size,
12315 rdr.associate_die_to_type(die, result, where_offset);
12317 rdr.maybe_schedule_declaration_only_enum_for_resolution(result);
12334 /// @param rdr the context used to read the ELF/DWARF information.
12339 reader& rdr)
12445 rdr.die_function_decl_with_no_symbol_map();
12459 /// @param rdr the DWARF reader to use.
12470 maybe_finish_function_decl_reading(reader& rdr,
12475 function_decl_sptr result = build_function_decl(rdr, die,
12504 /// @param rdr the DWARF reader to use.
12516 lookup_class_or_typedef_from_corpus(reader& rdr,
12528 scope_decl_sptr scope = get_scope_for_die(rdr, die,
12591 /// @param rdr the DWARF reader.
12603 is_function_for_die_a_member_of_class(reader& rdr,
12607 type_or_decl_base_sptr artifact = rdr.lookup_artifact_from_die(function_die);
12642 /// @param rdr the DWARF reader.
12656 add_or_update_member_function(reader& rdr,
12663 is_function_for_die_a_member_of_class(rdr, function_die, class_type);
12666 method = is_method_decl(build_ir_node_from_die(rdr, function_die,
12675 class_type, rdr);
12690 /// @param rdr the DWARF reader to consider.
12716 add_or_update_class_type(reader& rdr,
12729 const die_source source = rdr.get_die_source(die);
12738 rdr.die_wip_classes_map(source).find(dwarf_dieoffset(die));
12739 if (i != rdr.die_wip_classes_map(source).end())
12749 die_loc_and_name(rdr, die, loc, name, linkage_name);
12767 if (corpus_sptr corp = rdr.should_reuse_type_from_corpus_group())
12787 rdr.associate_die_to_type(die, result, where_offset);
12805 is_class_type(rdr.lookup_type_artifact_from_die(die)))
12827 result.reset(new class_decl(rdr.env(), name, size,
12869 rdr.associate_die_to_type(die, result, where_offset);
12871 rdr.maybe_schedule_declaration_only_class_for_resolution(result);
12878 rdr.die_wip_classes_map(source)[dwarf_dieoffset(die)] = result;
12898 rdr.scope_stack().push(scop.get());
12921 lookup_class_or_typedef_from_corpus(rdr, &type_die,
12926 is_type(build_ir_node_from_die(rdr, &type_die,
12946 die_member_offset(rdr, &child, offset);
12953 ABG_ASSERT(rdr.is_decl_only_class_scheduled_for_resolution(b));
12968 die_loc_and_name(rdr, &child, loc, n, m);
12985 bool is_laid_out = die_member_offset(rdr, &child,
12992 if (is_static && variable_is_suppressed(rdr,
12997 decl_base_sptr ty = is_decl(build_ir_node_from_die(rdr, &type_die,
13033 rdr.associate_die_to_decl(&child, dm, where_offset,
13040 add_or_update_member_function(rdr, &child, result,
13044 rdr.associate_die_to_decl(&child, f, where_offset,
13074 build_ir_node_from_die(rdr, &child, result.get(),
13081 rdr.scope_stack().pop();
13085 rdr.die_wip_classes_map(source).find(dwarf_dieoffset(die));
13086 if (i != rdr.die_wip_classes_map(source).end())
13091 rdr.die_wip_classes_map(source).erase(i);
13095 rdr.maybe_schedule_declaration_only_class_for_resolution(result);
13101 /// @param rdr the DWARF reader to use.
13124 add_or_update_union_type(reader& rdr,
13141 const die_source source = rdr.get_die_source(die);
13144 rdr.die_wip_classes_map(source).find(dwarf_dieoffset(die));
13145 if (i != rdr.die_wip_classes_map(source).end())
13155 die_loc_and_name(rdr, die, loc, name, linkage_name);
13178 if (corpus_sptr corp = rdr.should_reuse_type_from_corpus_group())
13187 rdr.associate_die_to_type(die, result, where_offset);
13200 is_union_type(rdr.lookup_artifact_from_die(die)))
13214 result.reset(new union_decl(rdr.env(), name, size, loc,
13231 rdr.associate_die_to_type(die, result, where_offset);
13235 // rdr.maybe_schedule_declaration_only_class_for_resolution(result);
13242 rdr.die_wip_classes_map(source)[dwarf_dieoffset(die)] = result;
13247 rdr.scope_stack().push(scop.get());
13263 die_loc_and_name(rdr, &child, loc, n, m);
13274 is_decl(build_ir_node_from_die(rdr, &type_die,
13300 rdr.associate_die_to_decl(&child, dm, where_offset,
13307 is_decl(build_ir_node_from_die(rdr, &child,
13317 finish_member_function_reading(&child, f, result, rdr);
13319 rdr.associate_die_to_decl(&child, f, where_offset,
13325 is_decl(build_ir_node_from_die(rdr, &child, result.get(),
13331 rdr.scope_stack().pop();
13335 rdr.die_wip_classes_map(source).find(dwarf_dieoffset(die));
13336 if (i != rdr.die_wip_classes_map(source).end())
13341 rdr.die_wip_classes_map(source).erase(i);
13351 /// @param rdr the DWARF reader to consider.
13366 build_qualified_type(reader& rdr,
13388 utype_decl = build_ir_node_for_void_type(rdr);
13391 utype_decl = is_decl(build_ir_node_from_die(rdr, &underlying_type_die,
13399 if (type_base_sptr t = rdr.lookup_type_from_die(die))
13402 rdr.associate_die_to_type(die, result, where_offset);
13422 rdr.associate_die_to_type(die, result, where_offset);
13438 /// @param rdr the DWARF reader to use.
13441 reader &rdr)
13446 rdr);
13447 rdr.schedule_type_for_late_canonicalization(t);
13452 rdr);
13453 rdr.schedule_type_for_late_canonicalization(t);
13463 add_decl_to_scope(*i, rdr.cur_transl_unit()->get_global_scope());
13464 rdr.schedule_type_for_late_canonicalization(*i);
13468 rdr);
13469 rdr.schedule_type_for_late_canonicalization(type);
13485 /// @param rdr the @ref reader to use.
13490 reader &rdr)
13512 schedule_array_tree_for_late_canonicalization(array, rdr);
13523 schedule_array_tree_for_late_canonicalization(typdef, rdr);
13557 rdr.schedule_type_for_late_canonicalization(is_type(qual_type));
13567 /// @param rdr the DWARF reader to consider.
13582 build_pointer_type_def(reader& rdr,
13602 utype_decl = build_ir_node_for_void_type(rdr);
13607 utype_decl = build_ir_node_from_die(rdr, &underlying_type_die,
13615 if (type_base_sptr t = rdr.lookup_type_from_die(die))
13628 uint64_t size = rdr.cur_transl_unit()->get_address_size();
13636 ABG_ASSERT((size_t) rdr.cur_transl_unit()->get_address_size() == size);
13641 rdr.associate_die_to_type(die, result, where_offset);
13648 /// @param rdr the DWARF reader to consider.
13663 build_reference_type(reader& rdr,
13683 build_ir_node_from_die(rdr, &underlying_type_die,
13691 if (type_base_sptr t = rdr.lookup_type_from_die(die))
13704 uint64_t size = rdr.cur_transl_unit()->get_address_size();
13710 ABG_ASSERT((size_t) rdr.cur_transl_unit()->get_address_size() == size);
13717 if (corpus_sptr corp = rdr.corpus())
13720 rdr.associate_die_to_type(die, result, where_offset);
13726 /// @param rdr the DWARF reader to consider.
13741 build_function_type(reader& rdr,
13754 const die_source source = rdr.get_die_source(die);
13758 auto i = rdr.die_wip_function_types_map(source).find(off);
13759 if (i != rdr.die_wip_function_types_map(source).end())
13769 translation_unit_sptr tu = rdr.cur_transl_unit();
13775 if (type_base_sptr t = rdr.lookup_fn_type_from_die_repr_per_tu(die))
13779 rdr.associate_die_to_type(die, result, where_offset);
13783 bool odr_is_relevant = rdr.odr_is_relevant(die);
13794 is_function_type(rdr.lookup_type_artifact_from_die(die)))
13796 rdr.associate_die_to_type(die, fn_type, where_offset);
13809 die_function_type_is_method_type(rdr, die, where_offset,
13827 is_class_or_union_type(build_ir_node_from_die(rdr, &class_type_die,
13844 : new function_type(rdr.env(), tu->get_address_size(),
13846 rdr.associate_die_to_type(die, result, where_offset);
13847 rdr.die_wip_function_types_map(source)[dwarf_dieoffset(die)] = result;
13853 is_type(build_ir_node_from_die(rdr, &ret_type_die,
13857 return_type = is_type(build_ir_node_for_void_type(rdr));
13872 die_loc_and_name(rdr, &child, loc, name, linkage_name);
13882 is_type(build_ir_node_from_die(rdr, &parm_type_die,
13899 is_type(build_ir_node_for_variadic_parameter_type(rdr));
13924 rdr.associate_die_repr_to_fn_type_per_tu(die, result);
13928 rdr.die_wip_function_types_map(source).
13930 if (i != rdr.die_wip_function_types_map(source).end())
13931 rdr.die_wip_function_types_map(source).erase(i);
13934 maybe_canonicalize_type(result, rdr);
13940 /// @param rdr the DWARF reader to consider.
13961 build_subrange_type(reader& rdr,
13984 is_type(build_ir_node_from_die(rdr,
13998 translation_unit::language language = rdr.cur_transl_unit()->get_language();
14054 (new array_type_def::subrange_type(rdr.env(),
14070 rdr.associate_die_to_type(die, result, where_offset);
14079 /// @param rdr the context to read from.
14092 build_subranges_from_array_type_die(reader& rdr,
14114 build_ir_node_from_die(rdr, &child,
14123 s = build_subrange_type(rdr, &child,
14136 /// @param rdr the DWARF reader to consider.
14151 build_array_type(reader& rdr,
14169 type_decl = is_decl(build_ir_node_from_die(rdr, &type_die,
14177 if (type_base_sptr t = rdr.lookup_type_from_die(die))
14189 build_subranges_from_array_type_die(rdr, die, subranges, where_offset);
14198 /// @param rdr the DWARF reader to consider.
14213 build_typedef_type(reader& rdr,
14229 die_loc_and_name(rdr, die, loc, name, linkage_name);
14231 if (corpus_sptr corp = rdr.should_reuse_type_from_corpus_group())
14242 utype = rdr.env().get_void_type();
14246 is_type(build_ir_node_from_die(rdr,
14267 rdr.associate_die_to_type(die, result, where_offset);
14280 /// @param rdr the DWARF reader to use.
14301 build_or_get_var_decl_if_not_suppressed(reader& rdr,
14309 if (variable_is_suppressed(rdr, scope, die, is_required_decl_spec))
14319 var = build_var_decl(rdr, die, where_offset, result);
14325 /// @param rdr the DWARF reader to use.
14342 build_var_decl(reader& rdr,
14361 is_decl(build_ir_node_from_die(rdr, &type_die,
14375 die_loc_and_name(rdr, die, loc, name, linkage_name);
14396 if (rdr.get_variable_address(die, var_addr))
14398 rdr.symtab()->
14403 var_sym = rdr.variable_symbol_is_exported(var_addr);
14429 /// @param rdr the ELF/DWARF reading content of interest.
14439 /// suppression specification attached to the @p rdr.
14441 function_is_suppressed(const reader& rdr,
14452 if (flinkage_name.empty() && rdr.die_is_in_c(function_die))
14463 && (!is_declaration_only || rdr.drop_undefined_syms()))
14466 if (!rdr.get_function_address(function_die, fn_addr))
14470 rdr.function_symbol_is_exported(fn_addr);
14487 return suppr::is_function_suppressed(rdr, qualified_name, flinkage_name,
14509 /// @param rdr the DWARF reader to use.
14532 build_or_get_fn_decl_if_not_suppressed(reader& rdr,
14540 if (function_is_suppressed(rdr, scope, fn_die, is_declaration_only))
14564 if ((fn = is_function_decl(rdr.lookup_artifact_from_die(fn_die))))
14566 fn = maybe_finish_function_decl_reading(rdr, fn_die, where_offset, fn);
14567 rdr.associate_die_to_decl(fn_die, fn, /*do_associate_by_repr=*/true);
14568 rdr.associate_die_to_type(fn_die, fn->get_type(), where_offset);
14591 fn = build_function_decl(rdr, fn_die, where_offset, result);
14600 /// @param rdr the ELF/DWARF reading content of interest.
14611 /// suppression specification attached to the @p rdr.
14613 variable_is_suppressed(const reader& rdr,
14625 if (linkage_name.empty() && rdr.die_is_in_c(variable_die))
14637 if (!rdr.get_variable_address(variable_die, var_addr))
14641 rdr.variable_symbol_is_exported(var_addr);
14658 return suppr::is_variable_suppressed(rdr,
14668 /// @param rdr the DWARF reader to consider.
14683 type_is_suppressed(const reader& rdr,
14697 die_loc_and_name(rdr, type_die, type_location, type_name, linkage_name);
14700 return suppr::is_type_suppressed(rdr,
14711 /// @param rdr the DWARF reader to consider.
14721 type_is_suppressed(const reader& rdr,
14726 return type_is_suppressed(rdr, scope, type_die, type_is_private);
14736 /// @param rdr the DWARF reader in use.
14750 get_opaque_version_of_type(reader &rdr,
14769 die_loc_and_name(rdr, type_die, type_location, type_name, linkage_name);
14783 rdr.declaration_only_classes().find(qualified_name);
14784 if (i != rdr.declaration_only_classes().end())
14794 class_decl_sptr klass(new class_decl(rdr.env(), type_name,
14802 rdr.associate_die_to_type(type_die, klass, where_offset);
14803 rdr.maybe_schedule_declaration_only_class_for_resolution(klass);
14811 rdr.declaration_only_enums().find(qualified_name);
14812 if (i != rdr.declaration_only_enums().end())
14821 build_enum_underlying_type(rdr, type_name, size,
14865 /// @param rdr the DWARF reader to use
14877 build_function_decl(reader& rdr,
14890 translation_unit_sptr tu = rdr.cur_transl_unit();
14895 die_loc_and_name(rdr, die, floc, fname, flinkage_name);
14899 is_class_or_union_type(get_scope_for_die(rdr, die, true, where_offset));
14920 function_type_sptr fn_type(build_function_type(rdr, die, is_method,
14925 maybe_canonicalize_type(fn_type, rdr);
14942 if (rdr.get_function_address(die, fn_addr))
14944 rdr.symtab()->
14949 fn_sym = rdr.function_symbol_is_exported(fn_addr);
14952 if (fn_sym && !rdr.symbol_already_belongs_to_a_function(fn_sym))
14962 rdr.associate_die_to_type(die, result->get_type(), where_offset);
14975 rdr.die_function_decl_with_no_symbol_map().erase(die_offset);
14992 /// @param rdr the @ref reader to use.
14995 reader& rdr)
15017 rdr.schedule_type_for_late_canonicalization(t);
15019 rdr.schedule_type_for_late_canonicalization(t);
15092 /// @param rdr the DWARF reader.
15121 build_ir_node_from_die(reader& rdr,
15138 if (rdr.load_all_types() && die_is_type(die))
15149 const die_source source_of_die = rdr.get_die_source(die);
15151 if ((result = rdr.lookup_decl_from_die_offset(dwarf_dieoffset(die),
15154 if (rdr.load_all_types())
15173 if (type_decl_sptr t = build_type_decl(rdr, die, where_offset))
15176 add_decl_to_scope(t, rdr.cur_transl_unit()->get_global_scope());
15187 t = build_typedef_type(rdr, die,
15195 maybe_canonicalize_type(t, rdr);
15203 build_pointer_type_def(rdr, die,
15209 add_decl_to_scope(p, rdr.cur_transl_unit()->get_global_scope());
15211 maybe_canonicalize_type(p, rdr);
15220 build_reference_type(rdr, die,
15226 add_decl_to_scope(r, rdr.cur_transl_unit()->get_global_scope());
15228 rdr.associate_die_to_type(die, r, where_offset);
15229 maybe_canonicalize_type(r, rdr);
15239 build_qualified_type(rdr, die,
15247 rdr);
15255 rdr.associate_die_to_type(die, ty, where_offset);
15257 add_decl_to_scope(d, rdr.cur_transl_unit()->get_global_scope());
15258 maybe_canonicalize_type(is_type(result), rdr);
15267 type_is_suppressed(rdr, scope, die, type_is_private);
15276 result = get_opaque_version_of_type(rdr, scope, die, where_offset);
15277 maybe_canonicalize_type(is_type(result), rdr);
15281 enum_type_decl_sptr e = build_enum_type(rdr, die, scope,
15288 maybe_canonicalize_type(is_type(result), rdr);
15299 type_is_suppressed(rdr, scope, die, type_is_private);
15309 result = get_opaque_version_of_type(rdr, scope, die, where_offset);
15310 maybe_canonicalize_type(is_type(result), rdr);
15320 get_scope_for_die(rdr, &spec_die,
15325 is_decl(build_ir_node_from_die(rdr, &spec_die,
15336 add_or_update_class_type(rdr, die,
15346 add_or_update_class_type(rdr, die, scope,
15356 maybe_canonicalize_type(klass, rdr);
15362 if (!type_is_suppressed(rdr, scope, die))
15365 add_or_update_union_type(rdr, die, scope,
15373 maybe_canonicalize_type(union_type, rdr);
15382 function_type_sptr f = build_function_type(rdr, die,
15389 maybe_canonicalize_type(f, rdr);
15395 array_type_def_sptr a = build_array_type(rdr,
15402 add_decl_to_scope(a, rdr.cur_transl_unit()->get_global_scope());
15403 rdr.associate_die_to_type(die, a, where_offset);
15404 maybe_canonicalize_type(a, rdr);
15414 build_subrange_type(rdr, die, where_offset);
15418 add_decl_to_scope(s, rdr.cur_transl_unit()->get_global_scope());
15419 rdr.associate_die_to_type(die, s, where_offset);
15420 maybe_canonicalize_type(s, rdr);
15448 result = build_namespace_decl_and_add_to_ir(rdr, die, where_offset);
15458 ABG_ASSERT(!is_c_language(rdr.cur_transl_unit()->get_language()));
15465 get_scope_for_die(rdr, &spec_die,
15467 die_is_effectively_public_decl(rdr, die),
15472 is_decl(build_ir_node_from_die(rdr, &spec_die,
15484 m = build_var_decl(rdr, die, where_offset, m);
15488 rdr.associate_die_to_decl(die, m, where_offset,
15494 rdr.var_decls_to_re_add_to_tree().push_back(m);
15497 rdr.maybe_add_var_to_exported_decls(m.get());
15503 build_or_get_var_decl_if_not_suppressed(rdr, scope, die,
15513 rdr.var_decls_to_re_add_to_tree().push_back(v);
15514 rdr.maybe_add_var_to_exported_decls(v.get());
15548 interface_scope = get_scope_for_die(rdr, interface_die,
15559 d = is_decl(build_ir_node_from_die(rdr,
15580 rdr.scope_stack().push(scope);
15587 result = build_or_get_fn_decl_if_not_suppressed(rdr, logical_scope,
15610 finish_member_function_reading(die, fn, klass, rdr);
15615 rdr.maybe_add_fn_to_exported_decls(fn.get());
15616 rdr.associate_die_to_decl(die, fn, where_offset,
15618 maybe_canonicalize_type(fn->get_type(), rdr);
15621 rdr.scope_stack().pop();
15686 rdr.associate_die_to_decl(die, is_decl(result), where_offset,
15690 if (rdr.load_all_types())
15701 /// @param rdr the DWARF reader to use.
15705 build_ir_node_for_void_type(reader& rdr)
15707 const environment& env = rdr.env();
15713 rdr.cur_transl_unit()->get_global_scope());
15720 /// @param rdr the DWARF reader to use.
15724 build_ir_node_for_variadic_parameter_type(reader &rdr)
15727 const environment& env = rdr.env();
15733 rdr.cur_transl_unit()->get_global_scope());
15742 /// @param rdr the DWARF reader.
15761 build_ir_node_from_die(reader& rdr,
15769 if (is_c_language(rdr.cur_transl_unit()->get_language()))
15771 const scope_decl_sptr& scop = rdr.global_scope();
15772 return build_ir_node_from_die(rdr, die, scop.get(),
15787 called_from_public_decl || die_is_effectively_public_decl(rdr, die);
15788 scope_decl_sptr scope = get_scope_for_die(rdr, die,
15791 return build_ir_node_from_die(rdr, die, scope.get(),
15847 /// @param rdr the context to re-initialize.
15879 reset_reader(elf_based_reader& rdr,
15885 reader& r = dynamic_cast<reader&>(rdr);
15929 elf_based_reader_sptr rdr =
15934 return rdr->read_corpus(status);