Lines Matching full:cache
38 static void process_linebreak(struct die *cache, int n)
42 die_map_add_linebreak(cache, n);
109 static struct cache srcfile_cache;
147 static bool is_kabi_definition(struct die *cache, Dwarf_Die *die)
154 if (kabi_is_declonly(cache->fqn))
163 static void process(struct die *cache, const char *s)
176 if (cache)
177 die_debug_r("cache %p string '%s'", cache, s);
178 die_map_add_string(cache, s);
183 static void process_fmt(struct die *cache, const char *fmt, ...)
193 process(cache, buf);
197 static void update_fqn(struct die *cache, Dwarf_Die *die)
201 if (!cache->fqn) {
204 cache->fqn = xstrdup(fqn->fqn);
206 cache->fqn = "";
210 static void process_fqn(struct die *cache, Dwarf_Die *die)
212 update_fqn(cache, die);
213 if (*cache->fqn)
214 process(cache, " ");
215 process(cache, cache->fqn);
219 static void process_##attribute##_attr(struct die *cache, \
224 process_fmt(cache, " " #attribute "(%" PRIu64 ")", \
236 static void process_byte_size_attr(struct die *cache, Dwarf_Die *die)
242 if (stable && kabi_get_byte_size(cache->fqn, &override))
245 process_fmt(cache, " byte_size(%" PRIu64 ")", value);
266 int process_die_container(struct state *state, struct die *cache,
281 res = checkp(func(state, cache, ¤t));
300 static void process_type_attr(struct state *state, struct die *cache,
306 check(process_type(state, cache, &type));
311 process(cache, "base_type void");
314 static void process_list_comma(struct state *state, struct die *cache)
319 process(cache, " ,");
320 process_linebreak(cache, 0);
325 static void __process_list_type(struct state *state, struct die *cache,
336 process_list_comma(state, cache);
337 process(cache, type);
338 process_type_attr(state, cache, die);
343 process(cache, " ");
344 process(cache, name);
347 process_accessibility_attr(cache, die);
348 process_bit_size_attr(cache, die);
349 process_data_bit_offset_attr(cache, die);
350 process_data_member_location_attr(cache, die);
355 struct die *cache, Dwarf_Die *die) \
357 __process_list_type(state, cache, die, #type " "); \
364 static void __process_type(struct state *state, struct die *cache,
367 process(cache, type);
368 process_fqn(cache, die);
369 process(cache, " {");
370 process_linebreak(cache, 1);
371 process_type_attr(state, cache, die);
372 process_linebreak(cache, -1);
373 process(cache, "}");
374 process_byte_size_attr(cache, die);
375 process_alignment_attr(cache, die);
380 struct die *cache, Dwarf_Die *die) \
382 __process_type(state, cache, die, #type "_type"); \
398 static void process_subrange_type(struct state *state, struct die *cache,
404 process_fmt(cache, "[%" PRIu64 "]", count);
406 process_fmt(cache, "[%" PRIu64 "]", count + 1);
408 process(cache, "[]");
411 static void process_array_type(struct state *state, struct die *cache,
414 process(cache, "array_type");
416 check(process_die_container(state, cache, die, process_type,
418 process(cache, " {");
419 process_linebreak(cache, 1);
420 process_type_attr(state, cache, die);
421 process_linebreak(cache, -1);
422 process(cache, "}");
425 static void __process_subroutine_type(struct state *state, struct die *cache,
428 process(cache, type);
429 process(cache, " (");
430 process_linebreak(cache, 1);
432 check(process_die_container(state, cache, die, process_type,
434 process_linebreak(cache, -1);
435 process(cache, ")");
436 process_linebreak(cache, 0);
438 process(cache, "-> ");
439 process_type_attr(state, cache, die);
442 static void process_subroutine_type(struct state *state, struct die *cache,
445 __process_subroutine_type(state, cache, die, "subroutine_type");
448 static void process_variant_type(struct state *state, struct die *cache,
451 process_list_comma(state, cache);
452 process(cache, "variant {");
453 process_linebreak(cache, 1);
454 check(process_die_container(state, cache, die, process_type,
456 process_linebreak(cache, -1);
457 process(cache, "}");
458 process_discr_value_attr(cache, die);
461 static void process_variant_part_type(struct state *state, struct die *cache,
464 process_list_comma(state, cache);
465 process(cache, "variant_part {");
466 process_linebreak(cache, 1);
467 check(process_die_container(state, cache, die, process_type,
469 process_linebreak(cache, -1);
470 process(cache, "}");
667 static int ___process_structure_type(struct state *state, struct die *cache,
674 return check(process_type(state, cache, die));
676 return check(process_type(state, cache, die));
690 static void __process_structure_type(struct state *state, struct die *cache,
697 process(cache, type);
698 process_fqn(cache, die);
699 process(cache, " {");
700 process_linebreak(cache, 1);
702 expand = state->expand.expand && is_kabi_definition(cache, die);
705 state->expand.current_fqn = cache->fqn;
706 check(process_die_container(state, cache, die, process_func,
710 process_linebreak(cache, -1);
711 process(cache, "}");
714 process_byte_size_attr(cache, die);
715 process_alignment_attr(cache, die);
721 struct state *state, struct die *cache, Dwarf_Die *die) \
723 __process_structure_type(state, cache, die, \
732 static void process_union_type(struct state *state, struct die *cache,
741 check(process_type(state, cache, &placeholder));
745 __process_structure_type(state, cache, die, "union_type",
749 static void process_enumerator_type(struct state *state, struct die *cache,
758 update_fqn(cache, die);
761 cache->fqn))
765 state->expand.current_fqn, cache->fqn, &override);
769 process_list_comma(state, cache);
770 process(cache, "enumerator");
771 process_fqn(cache, die);
774 process(cache, " = ");
775 process_fmt(cache, "%" PRIu64, value);
779 static void process_enumeration_type(struct state *state, struct die *cache,
782 __process_structure_type(state, cache, die, "enumeration_type",
786 static void process_base_type(struct state *state, struct die *cache,
789 process(cache, "base_type");
790 process_fqn(cache, die);
791 process_byte_size_attr(cache, die);
792 process_encoding_attr(cache, die);
793 process_alignment_attr(cache, die);
796 static void process_unspecified_type(struct state *state, struct die *cache,
803 process(cache, "unspecified_type");
806 static void process_cached(struct state *state, struct die *cache,
812 list_for_each_entry(df, &cache->fragments, list) {
815 die_debug_b("cache %p STRING '%s'", cache,
826 die_debug_b("cache %p DIE addr %" PRIxPTR " tag %x",
827 cache, df->data.addr, dwarf_tag(&child));
864 process_##type##_type(state, cache, die); \
870 struct die *cache;
895 cache = die_map_get(die, want_state);
897 if (cache->state == want_state) {
899 die_state_name(cache->state));
901 process_cached(state, cache, die);
902 die_map_add_die(parent, cache);
909 die_state_name(cache->state), die_state_name(want_state));
946 die_debug_r("parent %p cache %p die addr %p tag %x", parent, cache,
949 /* Update cache state and append to the parent (if any) */
950 cache->tag = tag;
951 cache->state = want_state;
952 die_map_add_die(parent, cache);
963 struct die *cache;
965 cache = die_map_get(die, DIE_SYMBOL);
967 if (cache->state != DIE_INCOMPLETE)
970 cache->tag = dwarf_tag(die);
971 return cache;
977 struct die *cache;
981 cache = get_symbol_cache(state, die);
982 if (!cache)
986 check(process_func(state, cache, die));
987 cache->state = DIE_SYMBOL;
992 static int __process_subprogram(struct state *state, struct die *cache,
995 __process_subroutine_type(state, cache, die, "subprogram");
1004 static int __process_variable(struct state *state, struct die *cache,
1007 process(cache, "variable ");
1008 process_type_attr(state, cache, die);
1042 static int process_exported_symbols(struct state *unused, struct die *cache,
1053 NULL, cache, die, process_exported_symbols, match_all));
1108 struct die *cache;
1115 if (!__die_map_get((uintptr_t)die->addr, DIE_FQN, &cache))
1159 /* If the DIE has a non-empty name, cache it. */
1161 cache = die_map_get(die, DIE_FQN);
1163 cache->fqn = fqn;
1164 cache->state = DIE_FQN;