• Home
  • Raw
  • Download

Lines Matching +full:0 +full:d

101 	return strcmp(a, b) == 0;  in str_equal_fn()
104 static const char *btf_name_of(const struct btf_dump *d, __u32 name_off) in btf_name_of() argument
106 return btf__name_by_offset(d->btf, name_off); in btf_name_of()
109 static void btf_dump_printf(const struct btf_dump *d, const char *fmt, ...) in btf_dump_printf() argument
114 d->printf_fn(d->opts.ctx, fmt, args); in btf_dump_printf()
118 static int btf_dump_mark_referenced(struct btf_dump *d);
119 static int btf_dump_resize(struct btf_dump *d);
126 struct btf_dump *d; in btf_dump__new() local
129 d = calloc(1, sizeof(struct btf_dump)); in btf_dump__new()
130 if (!d) in btf_dump__new()
133 d->btf = btf; in btf_dump__new()
134 d->btf_ext = btf_ext; in btf_dump__new()
135 d->printf_fn = printf_fn; in btf_dump__new()
136 d->opts.ctx = opts ? opts->ctx : NULL; in btf_dump__new()
137 d->ptr_sz = btf__pointer_size(btf) ? : sizeof(void *); in btf_dump__new()
139 d->type_names = hashmap__new(str_hash_fn, str_equal_fn, NULL); in btf_dump__new()
140 if (IS_ERR(d->type_names)) { in btf_dump__new()
141 err = PTR_ERR(d->type_names); in btf_dump__new()
142 d->type_names = NULL; in btf_dump__new()
145 d->ident_names = hashmap__new(str_hash_fn, str_equal_fn, NULL); in btf_dump__new()
146 if (IS_ERR(d->ident_names)) { in btf_dump__new()
147 err = PTR_ERR(d->ident_names); in btf_dump__new()
148 d->ident_names = NULL; in btf_dump__new()
152 err = btf_dump_resize(d); in btf_dump__new()
156 return d; in btf_dump__new()
158 btf_dump__free(d); in btf_dump__new()
162 static int btf_dump_resize(struct btf_dump *d) in btf_dump_resize() argument
164 int err, last_id = btf__get_nr_types(d->btf); in btf_dump_resize()
166 if (last_id <= d->last_id) in btf_dump_resize()
167 return 0; in btf_dump_resize()
169 if (btf_ensure_mem((void **)&d->type_states, &d->type_states_cap, in btf_dump_resize()
170 sizeof(*d->type_states), last_id + 1)) in btf_dump_resize()
172 if (btf_ensure_mem((void **)&d->cached_names, &d->cached_names_cap, in btf_dump_resize()
173 sizeof(*d->cached_names), last_id + 1)) in btf_dump_resize()
176 if (d->last_id == 0) { in btf_dump_resize()
178 d->type_states[0].order_state = ORDERED; in btf_dump_resize()
179 d->type_states[0].emit_state = EMITTED; in btf_dump_resize()
183 err = btf_dump_mark_referenced(d); in btf_dump_resize()
187 d->last_id = last_id; in btf_dump_resize()
188 return 0; in btf_dump_resize()
202 void btf_dump__free(struct btf_dump *d) in btf_dump__free() argument
206 if (IS_ERR_OR_NULL(d)) in btf_dump__free()
209 free(d->type_states); in btf_dump__free()
210 if (d->cached_names) { in btf_dump__free()
212 for (i = 0; i <= d->last_id; i++) { in btf_dump__free()
213 if (d->cached_names[i]) in btf_dump__free()
214 free((void *)d->cached_names[i]); in btf_dump__free()
217 free(d->cached_names); in btf_dump__free()
218 free(d->emit_queue); in btf_dump__free()
219 free(d->decl_stack); in btf_dump__free()
220 btf_dump_free_names(d->type_names); in btf_dump__free()
221 btf_dump_free_names(d->ident_names); in btf_dump__free()
223 free(d); in btf_dump__free()
226 static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr);
227 static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id);
243 * Returns 0 on success; <0, otherwise.
245 int btf_dump__dump_type(struct btf_dump *d, __u32 id) in btf_dump__dump_type() argument
249 if (id > btf__get_nr_types(d->btf)) in btf_dump__dump_type()
252 err = btf_dump_resize(d); in btf_dump__dump_type()
256 d->emit_queue_cnt = 0; in btf_dump__dump_type()
257 err = btf_dump_order_type(d, id, false); in btf_dump__dump_type()
258 if (err < 0) in btf_dump__dump_type()
261 for (i = 0; i < d->emit_queue_cnt; i++) in btf_dump__dump_type()
262 btf_dump_emit_type(d, d->emit_queue[i], 0 /*top-level*/); in btf_dump__dump_type()
264 return 0; in btf_dump__dump_type()
279 static int btf_dump_mark_referenced(struct btf_dump *d) in btf_dump_mark_referenced() argument
281 int i, j, n = btf__get_nr_types(d->btf); in btf_dump_mark_referenced()
285 for (i = d->last_id + 1; i <= n; i++) { in btf_dump_mark_referenced()
286 t = btf__type_by_id(d->btf, i); in btf_dump_mark_referenced()
302 d->type_states[t->type].referenced = 1; in btf_dump_mark_referenced()
308 d->type_states[a->index_type].referenced = 1; in btf_dump_mark_referenced()
309 d->type_states[a->type].referenced = 1; in btf_dump_mark_referenced()
316 for (j = 0; j < vlen; j++, m++) in btf_dump_mark_referenced()
317 d->type_states[m->type].referenced = 1; in btf_dump_mark_referenced()
323 for (j = 0; j < vlen; j++, p++) in btf_dump_mark_referenced()
324 d->type_states[p->type].referenced = 1; in btf_dump_mark_referenced()
330 for (j = 0; j < vlen; j++, v++) in btf_dump_mark_referenced()
331 d->type_states[v->type].referenced = 1; in btf_dump_mark_referenced()
338 return 0; in btf_dump_mark_referenced()
341 static int btf_dump_add_emit_queue_id(struct btf_dump *d, __u32 id) in btf_dump_add_emit_queue_id() argument
346 if (d->emit_queue_cnt >= d->emit_queue_cap) { in btf_dump_add_emit_queue_id()
347 new_cap = max(16, d->emit_queue_cap * 3 / 2); in btf_dump_add_emit_queue_id()
348 new_queue = libbpf_reallocarray(d->emit_queue, new_cap, sizeof(new_queue[0])); in btf_dump_add_emit_queue_id()
351 d->emit_queue = new_queue; in btf_dump_add_emit_queue_id()
352 d->emit_queue_cap = new_cap; in btf_dump_add_emit_queue_id()
355 d->emit_queue[d->emit_queue_cnt++] = id; in btf_dump_add_emit_queue_id()
356 return 0; in btf_dump_add_emit_queue_id()
429 * - 0, if type is part of weak link (so can be satisfied through forward
431 * - <0, on error (e.g., unsatisfiable type loop detected).
433 static int btf_dump_order_type(struct btf_dump *d, __u32 id, bool through_ptr) in btf_dump_order_type() argument
446 struct btf_dump_type_aux_state *tstate = &d->type_states[id]; in btf_dump_order_type()
455 t = btf__type_by_id(d->btf, id); in btf_dump_order_type()
459 if (btf_is_composite(t) && through_ptr && t->name_off != 0) in btf_dump_order_type()
460 return 0; in btf_dump_order_type()
468 return 0; in btf_dump_order_type()
471 err = btf_dump_order_type(d, t->type, true); in btf_dump_order_type()
476 return btf_dump_order_type(d, btf_array(t)->type, false); in btf_dump_order_type()
486 if (through_ptr && t->name_off != 0) in btf_dump_order_type()
487 return 0; in btf_dump_order_type()
492 for (i = 0; i < vlen; i++, m++) { in btf_dump_order_type()
493 err = btf_dump_order_type(d, m->type, false); in btf_dump_order_type()
494 if (err < 0) in btf_dump_order_type()
498 if (t->name_off != 0) { in btf_dump_order_type()
499 err = btf_dump_add_emit_queue_id(d, id); in btf_dump_order_type()
500 if (err < 0) in btf_dump_order_type()
514 if (t->name_off != 0 || !tstate->referenced) { in btf_dump_order_type()
515 err = btf_dump_add_emit_queue_id(d, id); in btf_dump_order_type()
525 is_strong = btf_dump_order_type(d, t->type, through_ptr); in btf_dump_order_type()
526 if (is_strong < 0) in btf_dump_order_type()
531 return 0; in btf_dump_order_type()
534 err = btf_dump_add_emit_queue_id(d, id); in btf_dump_order_type()
538 d->type_states[id].order_state = ORDERED; in btf_dump_order_type()
544 return btf_dump_order_type(d, t->type, through_ptr); in btf_dump_order_type()
550 err = btf_dump_order_type(d, t->type, through_ptr); in btf_dump_order_type()
551 if (err < 0) in btf_dump_order_type()
553 is_strong = err > 0; in btf_dump_order_type()
556 for (i = 0; i < vlen; i++, p++) { in btf_dump_order_type()
557 err = btf_dump_order_type(d, p->type, through_ptr); in btf_dump_order_type()
558 if (err < 0) in btf_dump_order_type()
560 if (err > 0) in btf_dump_order_type()
568 d->type_states[id].order_state = ORDERED; in btf_dump_order_type()
569 return 0; in btf_dump_order_type()
576 static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id,
579 static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id,
581 static void btf_dump_emit_struct_def(struct btf_dump *d, __u32 id,
584 static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id,
586 static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id,
589 static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id,
592 static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id,
601 static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id,
603 static void btf_dump_emit_type_chain(struct btf_dump *d,
607 static const char *btf_dump_type_name(struct btf_dump *d, __u32 id);
608 static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id);
609 static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map,
612 static bool btf_dump_is_blacklisted(struct btf_dump *d, __u32 id) in btf_dump_is_blacklisted() argument
614 const struct btf_type *t = btf__type_by_id(d->btf, id); in btf_dump_is_blacklisted()
622 if (t->name_off == 0) in btf_dump_is_blacklisted()
624 return strcmp(btf_name_of(d, t->name_off), "__builtin_va_list") == 0; in btf_dump_is_blacklisted()
645 static void btf_dump_emit_type(struct btf_dump *d, __u32 id, __u32 cont_id) in btf_dump_emit_type() argument
647 struct btf_dump_type_aux_state *tstate = &d->type_states[id]; in btf_dump_emit_type()
648 bool top_level_def = cont_id == 0; in btf_dump_emit_type()
655 t = btf__type_by_id(d->btf, id); in btf_dump_emit_type()
671 if (t->name_off == 0) { in btf_dump_emit_type()
676 btf_dump_emit_struct_fwd(d, id, t); in btf_dump_emit_type()
677 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
686 if (!btf_dump_is_blacklisted(d, id)) { in btf_dump_emit_type()
687 btf_dump_emit_typedef_def(d, id, t, 0); in btf_dump_emit_type()
688 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
702 btf_dump_emit_missing_aliases(d, id, t); in btf_dump_emit_type()
708 btf_dump_emit_enum_def(d, id, t, 0); in btf_dump_emit_type()
709 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
717 btf_dump_emit_type(d, t->type, cont_id); in btf_dump_emit_type()
720 btf_dump_emit_type(d, btf_array(t)->type, cont_id); in btf_dump_emit_type()
723 btf_dump_emit_fwd_def(d, id, t); in btf_dump_emit_type()
724 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
729 btf_dump_emit_type(d, t->type, id); in btf_dump_emit_type()
737 if (!tstate->fwd_emitted && !btf_dump_is_blacklisted(d, id)) { in btf_dump_emit_type()
738 btf_dump_emit_typedef_def(d, id, t, 0); in btf_dump_emit_type()
739 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
753 if (top_level_def || t->name_off == 0) { in btf_dump_emit_type()
758 new_cont_id = t->name_off == 0 ? cont_id : id; in btf_dump_emit_type()
759 for (i = 0; i < vlen; i++, m++) in btf_dump_emit_type()
760 btf_dump_emit_type(d, m->type, new_cont_id); in btf_dump_emit_type()
762 btf_dump_emit_struct_fwd(d, id, t); in btf_dump_emit_type()
763 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
768 btf_dump_emit_struct_def(d, id, t, 0); in btf_dump_emit_type()
769 btf_dump_printf(d, ";\n\n"); in btf_dump_emit_type()
780 btf_dump_emit_type(d, t->type, cont_id); in btf_dump_emit_type()
781 for (i = 0; i < vlen; i++, p++) in btf_dump_emit_type()
782 btf_dump_emit_type(d, p->type, cont_id); in btf_dump_emit_type()
806 for (i = 0; i < vlen; i++, m++) { in btf_is_struct_packed()
809 if (align && bit_sz == 0 && m->offset % (8 * align) != 0) in btf_is_struct_packed()
825 static void btf_dump_emit_bit_padding(const struct btf_dump *d, in btf_dump_emit_bit_padding() argument
830 int ptr_bits = d->ptr_sz * 8; in btf_dump_emit_bit_padding()
832 if (off_diff <= 0) in btf_dump_emit_bit_padding()
835 if (m_bit_sz == 0 && off_diff < align * 8) in btf_dump_emit_bit_padding()
839 while (off_diff > 0) { in btf_dump_emit_bit_padding()
856 btf_dump_printf(d, "\n%s%s: %d;", pfx(lvl), pad_type, pad_bits); in btf_dump_emit_bit_padding()
861 static void btf_dump_emit_struct_fwd(struct btf_dump *d, __u32 id, in btf_dump_emit_struct_fwd() argument
864 btf_dump_printf(d, "%s %s", in btf_dump_emit_struct_fwd()
866 btf_dump_type_name(d, id)); in btf_dump_emit_struct_fwd()
869 static void btf_dump_emit_struct_def(struct btf_dump *d, in btf_dump_emit_struct_def() argument
876 int align, i, packed, off = 0; in btf_dump_emit_struct_def()
879 packed = is_struct ? btf_is_struct_packed(d->btf, id, t) : 0; in btf_dump_emit_struct_def()
881 btf_dump_printf(d, "%s%s%s {", in btf_dump_emit_struct_def()
884 btf_dump_type_name(d, id)); in btf_dump_emit_struct_def()
886 for (i = 0; i < vlen; i++, m++) { in btf_dump_emit_struct_def()
890 fname = btf_name_of(d, m->name_off); in btf_dump_emit_struct_def()
893 align = packed ? 1 : btf__align_of(d->btf, m->type); in btf_dump_emit_struct_def()
895 btf_dump_emit_bit_padding(d, off, m_off, m_sz, align, lvl + 1); in btf_dump_emit_struct_def()
896 btf_dump_printf(d, "\n%s", pfx(lvl + 1)); in btf_dump_emit_struct_def()
897 btf_dump_emit_type_decl(d, m->type, fname, lvl + 1); in btf_dump_emit_struct_def()
900 btf_dump_printf(d, ": %d", m_sz); in btf_dump_emit_struct_def()
903 m_sz = max((__s64)0, btf__resolve_size(d->btf, m->type)); in btf_dump_emit_struct_def()
906 btf_dump_printf(d, ";"); in btf_dump_emit_struct_def()
911 align = packed ? 1 : btf__align_of(d->btf, id); in btf_dump_emit_struct_def()
912 btf_dump_emit_bit_padding(d, off, t->size * 8, 0, align, in btf_dump_emit_struct_def()
917 btf_dump_printf(d, "\n"); in btf_dump_emit_struct_def()
918 btf_dump_printf(d, "%s}", pfx(lvl)); in btf_dump_emit_struct_def()
920 btf_dump_printf(d, " __attribute__((packed))"); in btf_dump_emit_struct_def()
934 static void btf_dump_emit_missing_aliases(struct btf_dump *d, __u32 id, in btf_dump_emit_missing_aliases() argument
937 const char *name = btf_dump_type_name(d, id); in btf_dump_emit_missing_aliases()
940 for (i = 0; i < ARRAY_SIZE(missing_base_types); i++) { in btf_dump_emit_missing_aliases()
941 if (strcmp(name, missing_base_types[i][0]) == 0) { in btf_dump_emit_missing_aliases()
942 btf_dump_printf(d, "typedef %s %s;\n\n", in btf_dump_emit_missing_aliases()
949 static void btf_dump_emit_enum_fwd(struct btf_dump *d, __u32 id, in btf_dump_emit_enum_fwd() argument
952 btf_dump_printf(d, "enum %s", btf_dump_type_name(d, id)); in btf_dump_emit_enum_fwd()
955 static void btf_dump_emit_enum_def(struct btf_dump *d, __u32 id, in btf_dump_emit_enum_def() argument
965 btf_dump_printf(d, "enum%s%s", in btf_dump_emit_enum_def()
967 btf_dump_type_name(d, id)); in btf_dump_emit_enum_def()
970 btf_dump_printf(d, " {"); in btf_dump_emit_enum_def()
971 for (i = 0; i < vlen; i++, v++) { in btf_dump_emit_enum_def()
972 name = btf_name_of(d, v->name_off); in btf_dump_emit_enum_def()
974 dup_cnt = btf_dump_name_dups(d, d->ident_names, name); in btf_dump_emit_enum_def()
976 btf_dump_printf(d, "\n%s%s___%zu = %u,", in btf_dump_emit_enum_def()
980 btf_dump_printf(d, "\n%s%s = %u,", in btf_dump_emit_enum_def()
985 btf_dump_printf(d, "\n%s}", pfx(lvl)); in btf_dump_emit_enum_def()
989 static void btf_dump_emit_fwd_def(struct btf_dump *d, __u32 id, in btf_dump_emit_fwd_def() argument
992 const char *name = btf_dump_type_name(d, id); in btf_dump_emit_fwd_def()
995 btf_dump_printf(d, "union %s", name); in btf_dump_emit_fwd_def()
997 btf_dump_printf(d, "struct %s", name); in btf_dump_emit_fwd_def()
1000 static void btf_dump_emit_typedef_def(struct btf_dump *d, __u32 id, in btf_dump_emit_typedef_def() argument
1003 const char *name = btf_dump_ident_name(d, id); in btf_dump_emit_typedef_def()
1011 if (t->type == 0 && strcmp(name, "__gnuc_va_list") == 0) { in btf_dump_emit_typedef_def()
1012 btf_dump_printf(d, "typedef __builtin_va_list __gnuc_va_list"); in btf_dump_emit_typedef_def()
1016 btf_dump_printf(d, "typedef "); in btf_dump_emit_typedef_def()
1017 btf_dump_emit_type_decl(d, t->type, name, lvl); in btf_dump_emit_typedef_def()
1020 static int btf_dump_push_decl_stack_id(struct btf_dump *d, __u32 id) in btf_dump_push_decl_stack_id() argument
1025 if (d->decl_stack_cnt >= d->decl_stack_cap) { in btf_dump_push_decl_stack_id()
1026 new_cap = max(16, d->decl_stack_cap * 3 / 2); in btf_dump_push_decl_stack_id()
1027 new_stack = libbpf_reallocarray(d->decl_stack, new_cap, sizeof(new_stack[0])); in btf_dump_push_decl_stack_id()
1030 d->decl_stack = new_stack; in btf_dump_push_decl_stack_id()
1031 d->decl_stack_cap = new_cap; in btf_dump_push_decl_stack_id()
1034 d->decl_stack[d->decl_stack_cnt++] = id; in btf_dump_push_decl_stack_id()
1036 return 0; in btf_dump_push_decl_stack_id()
1080 int btf_dump__emit_type_decl(struct btf_dump *d, __u32 id, in btf_dump__emit_type_decl() argument
1089 err = btf_dump_resize(d); in btf_dump__emit_type_decl()
1094 lvl = OPTS_GET(opts, indent_level, 0); in btf_dump__emit_type_decl()
1095 d->strip_mods = OPTS_GET(opts, strip_mods, false); in btf_dump__emit_type_decl()
1096 btf_dump_emit_type_decl(d, id, fname, lvl); in btf_dump__emit_type_decl()
1097 d->strip_mods = false; in btf_dump__emit_type_decl()
1098 return 0; in btf_dump__emit_type_decl()
1101 static void btf_dump_emit_type_decl(struct btf_dump *d, __u32 id, in btf_dump_emit_type_decl() argument
1108 stack_start = d->decl_stack_cnt; in btf_dump_emit_type_decl()
1110 t = btf__type_by_id(d->btf, id); in btf_dump_emit_type_decl()
1111 if (d->strip_mods && btf_is_mod(t)) in btf_dump_emit_type_decl()
1114 err = btf_dump_push_decl_stack_id(d, id); in btf_dump_emit_type_decl()
1115 if (err < 0) { in btf_dump_emit_type_decl()
1121 pr_warn("not enough memory for decl stack:%d", err); in btf_dump_emit_type_decl()
1122 d->decl_stack_cnt = stack_start; in btf_dump_emit_type_decl()
1127 if (id == 0) in btf_dump_emit_type_decl()
1165 decl_stack.ids = d->decl_stack + stack_start; in btf_dump_emit_type_decl()
1166 decl_stack.cnt = d->decl_stack_cnt - stack_start; in btf_dump_emit_type_decl()
1167 btf_dump_emit_type_chain(d, &decl_stack, fname, lvl); in btf_dump_emit_type_decl()
1176 d->decl_stack_cnt = stack_start; in btf_dump_emit_type_decl()
1179 static void btf_dump_emit_mods(struct btf_dump *d, struct id_stack *decl_stack) in btf_dump_emit_mods() argument
1186 t = btf__type_by_id(d->btf, id); in btf_dump_emit_mods()
1190 btf_dump_printf(d, "volatile "); in btf_dump_emit_mods()
1193 btf_dump_printf(d, "const "); in btf_dump_emit_mods()
1196 btf_dump_printf(d, "restrict "); in btf_dump_emit_mods()
1205 static void btf_dump_drop_mods(struct btf_dump *d, struct id_stack *decl_stack) in btf_dump_drop_mods() argument
1212 t = btf__type_by_id(d->btf, id); in btf_dump_drop_mods()
1219 static void btf_dump_emit_name(const struct btf_dump *d, in btf_dump_emit_name() argument
1222 bool separate = name[0] && !last_was_ptr; in btf_dump_emit_name()
1224 btf_dump_printf(d, "%s%s", separate ? " " : "", name); in btf_dump_emit_name()
1227 static void btf_dump_emit_type_chain(struct btf_dump *d, in btf_dump_emit_type_chain() argument
1248 if (id == 0) { in btf_dump_emit_type_chain()
1250 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1251 btf_dump_printf(d, "void"); in btf_dump_emit_type_chain()
1256 t = btf__type_by_id(d->btf, id); in btf_dump_emit_type_chain()
1261 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1262 name = btf_name_of(d, t->name_off); in btf_dump_emit_type_chain()
1263 btf_dump_printf(d, "%s", name); in btf_dump_emit_type_chain()
1267 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1269 if (t->name_off == 0) in btf_dump_emit_type_chain()
1270 btf_dump_emit_struct_def(d, id, t, lvl); in btf_dump_emit_type_chain()
1272 btf_dump_emit_struct_fwd(d, id, t); in btf_dump_emit_type_chain()
1275 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1277 if (t->name_off == 0) in btf_dump_emit_type_chain()
1278 btf_dump_emit_enum_def(d, id, t, lvl); in btf_dump_emit_type_chain()
1280 btf_dump_emit_enum_fwd(d, id, t); in btf_dump_emit_type_chain()
1283 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1284 btf_dump_emit_fwd_def(d, id, t); in btf_dump_emit_type_chain()
1287 btf_dump_emit_mods(d, decls); in btf_dump_emit_type_chain()
1288 btf_dump_printf(d, "%s", btf_dump_ident_name(d, id)); in btf_dump_emit_type_chain()
1291 btf_dump_printf(d, "%s", last_was_ptr ? "*" : " *"); in btf_dump_emit_type_chain()
1294 btf_dump_printf(d, " volatile"); in btf_dump_emit_type_chain()
1297 btf_dump_printf(d, " const"); in btf_dump_emit_type_chain()
1300 btf_dump_printf(d, " restrict"); in btf_dump_emit_type_chain()
1317 btf_dump_drop_mods(d, decls); in btf_dump_emit_type_chain()
1319 if (decls->cnt == 0) { in btf_dump_emit_type_chain()
1320 btf_dump_emit_name(d, fname, last_was_ptr); in btf_dump_emit_type_chain()
1321 btf_dump_printf(d, "[%u]", a->nelems); in btf_dump_emit_type_chain()
1326 next_t = btf__type_by_id(d->btf, next_id); in btf_dump_emit_type_chain()
1329 if (fname[0] && !last_was_ptr) in btf_dump_emit_type_chain()
1330 btf_dump_printf(d, " "); in btf_dump_emit_type_chain()
1333 btf_dump_printf(d, "("); in btf_dump_emit_type_chain()
1334 btf_dump_emit_type_chain(d, decls, fname, lvl); in btf_dump_emit_type_chain()
1336 btf_dump_printf(d, ")"); in btf_dump_emit_type_chain()
1337 btf_dump_printf(d, "[%u]", a->nelems); in btf_dump_emit_type_chain()
1353 btf_dump_drop_mods(d, decls); in btf_dump_emit_type_chain()
1355 btf_dump_printf(d, " ("); in btf_dump_emit_type_chain()
1356 btf_dump_emit_type_chain(d, decls, fname, lvl); in btf_dump_emit_type_chain()
1357 btf_dump_printf(d, ")"); in btf_dump_emit_type_chain()
1359 btf_dump_emit_name(d, fname, last_was_ptr); in btf_dump_emit_type_chain()
1361 btf_dump_printf(d, "("); in btf_dump_emit_type_chain()
1368 if (vlen == 1 && p->type == 0) { in btf_dump_emit_type_chain()
1369 btf_dump_printf(d, ")"); in btf_dump_emit_type_chain()
1373 for (i = 0; i < vlen; i++, p++) { in btf_dump_emit_type_chain()
1374 if (i > 0) in btf_dump_emit_type_chain()
1375 btf_dump_printf(d, ", "); in btf_dump_emit_type_chain()
1378 if (i == vlen - 1 && p->type == 0) { in btf_dump_emit_type_chain()
1379 btf_dump_printf(d, "..."); in btf_dump_emit_type_chain()
1383 name = btf_name_of(d, p->name_off); in btf_dump_emit_type_chain()
1384 btf_dump_emit_type_decl(d, p->type, name, lvl); in btf_dump_emit_type_chain()
1387 btf_dump_printf(d, ")"); in btf_dump_emit_type_chain()
1399 btf_dump_emit_name(d, fname, last_was_ptr); in btf_dump_emit_type_chain()
1403 static size_t btf_dump_name_dups(struct btf_dump *d, struct hashmap *name_map, in btf_dump_name_dups() argument
1407 size_t dup_cnt = 0; in btf_dump_name_dups()
1427 static const char *btf_dump_resolve_name(struct btf_dump *d, __u32 id, in btf_dump_resolve_name() argument
1430 struct btf_dump_type_aux_state *s = &d->type_states[id]; in btf_dump_resolve_name()
1431 const struct btf_type *t = btf__type_by_id(d->btf, id); in btf_dump_resolve_name()
1432 const char *orig_name = btf_name_of(d, t->name_off); in btf_dump_resolve_name()
1433 const char **cached_name = &d->cached_names[id]; in btf_dump_resolve_name()
1436 if (t->name_off == 0) in btf_dump_resolve_name()
1442 dup_cnt = btf_dump_name_dups(d, name_map, orig_name); in btf_dump_resolve_name()
1455 static const char *btf_dump_type_name(struct btf_dump *d, __u32 id) in btf_dump_type_name() argument
1457 return btf_dump_resolve_name(d, id, d->type_names); in btf_dump_type_name()
1460 static const char *btf_dump_ident_name(struct btf_dump *d, __u32 id) in btf_dump_ident_name() argument
1462 return btf_dump_resolve_name(d, id, d->ident_names); in btf_dump_ident_name()