Lines Matching refs:btf_ext

1107 				 struct btf_ext **btf_ext)
1235 } else if (btf_ext && strcmp(name, BTF_EXT_ELF_SEC) == 0) {
1281 if (btf_ext && btf_ext_data) {
1282 *btf_ext = btf_ext__new(btf_ext_data->d_buf, btf_ext_data->d_size);
1283 err = libbpf_get_error(*btf_ext);
1286 } else if (btf_ext) {
1287 *btf_ext = NULL;
1303 if (btf_ext)
1304 btf_ext__free(*btf_ext);
1310 struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext)
1312 return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext));
1393 static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext)
1398 if (btf_ext)
1399 *btf_ext = NULL;
1407 return btf_parse_elf(path, base_btf, btf_ext);
1410 struct btf *btf__parse(const char *path, struct btf_ext **btf_ext)
1412 return libbpf_ptr(btf_parse(path, NULL, btf_ext));
2917 static int btf_ext_setup_info(struct btf_ext *btf_ext,
2936 info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off;
2939 if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) {
3008 static int btf_ext_setup_func_info(struct btf_ext *btf_ext)
3011 .off = btf_ext->hdr->func_info_off,
3012 .len = btf_ext->hdr->func_info_len,
3014 .ext_info = &btf_ext->func_info,
3018 return btf_ext_setup_info(btf_ext, &param);
3021 static int btf_ext_setup_line_info(struct btf_ext *btf_ext)
3024 .off = btf_ext->hdr->line_info_off,
3025 .len = btf_ext->hdr->line_info_len,
3027 .ext_info = &btf_ext->line_info,
3031 return btf_ext_setup_info(btf_ext, &param);
3034 static int btf_ext_setup_core_relos(struct btf_ext *btf_ext)
3037 .off = btf_ext->hdr->core_relo_off,
3038 .len = btf_ext->hdr->core_relo_len,
3040 .ext_info = &btf_ext->core_relo_info,
3044 return btf_ext_setup_info(btf_ext, &param);
3083 void btf_ext__free(struct btf_ext *btf_ext)
3085 if (IS_ERR_OR_NULL(btf_ext))
3087 free(btf_ext->func_info.sec_idxs);
3088 free(btf_ext->line_info.sec_idxs);
3089 free(btf_ext->core_relo_info.sec_idxs);
3090 free(btf_ext->data);
3091 free(btf_ext);
3094 struct btf_ext *btf_ext__new(const __u8 *data, __u32 size)
3096 struct btf_ext *btf_ext;
3099 btf_ext = calloc(1, sizeof(struct btf_ext));
3100 if (!btf_ext)
3103 btf_ext->data_size = size;
3104 btf_ext->data = malloc(size);
3105 if (!btf_ext->data) {
3109 memcpy(btf_ext->data, data, size);
3111 err = btf_ext_parse_hdr(btf_ext->data, size);
3115 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, line_info_len)) {
3120 err = btf_ext_setup_func_info(btf_ext);
3124 err = btf_ext_setup_line_info(btf_ext);
3128 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len))
3131 err = btf_ext_setup_core_relos(btf_ext);
3137 btf_ext__free(btf_ext);
3141 return btf_ext;
3144 const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size)
3146 *size = btf_ext->data_size;
3147 return btf_ext->data;
3169 * information. If optional `struct btf_ext` representing '.BTF.ext' ELF section
3376 struct btf_ext *btf_ext;
3490 d->btf_ext = OPTS_GET(opts, btf_ext, NULL);
3550 if (!d->btf_ext)
3553 r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx);
5015 if (!d->btf_ext)
5018 r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d);
5209 int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx)
5215 seg = &btf_ext->func_info;
5226 seg = &btf_ext->core_relo_info;
5240 int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx)
5246 seg = &btf_ext->func_info;
5253 seg = &btf_ext->line_info;
5271 seg = &btf_ext->core_relo_info;