Lines Matching refs:btf_ext

1088 				 struct btf_ext **btf_ext)
1157 } else if (btf_ext && strcmp(name, BTF_EXT_ELF_SEC) == 0) {
1190 if (btf_ext && btf_ext_data) {
1191 *btf_ext = btf_ext__new(btf_ext_data->d_buf, btf_ext_data->d_size);
1192 err = libbpf_get_error(*btf_ext);
1195 } else if (btf_ext) {
1196 *btf_ext = NULL;
1206 if (btf_ext)
1207 btf_ext__free(*btf_ext);
1213 struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext)
1215 return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext));
1296 static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext)
1301 if (btf_ext)
1302 *btf_ext = NULL;
1310 return btf_parse_elf(path, base_btf, btf_ext);
1313 struct btf *btf__parse(const char *path, struct btf_ext **btf_ext)
1315 return libbpf_ptr(btf_parse(path, NULL, btf_ext));
2826 static int btf_ext_setup_info(struct btf_ext *btf_ext,
2845 info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off;
2848 if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) {
2917 static int btf_ext_setup_func_info(struct btf_ext *btf_ext)
2920 .off = btf_ext->hdr->func_info_off,
2921 .len = btf_ext->hdr->func_info_len,
2923 .ext_info = &btf_ext->func_info,
2927 return btf_ext_setup_info(btf_ext, &param);
2930 static int btf_ext_setup_line_info(struct btf_ext *btf_ext)
2933 .off = btf_ext->hdr->line_info_off,
2934 .len = btf_ext->hdr->line_info_len,
2936 .ext_info = &btf_ext->line_info,
2940 return btf_ext_setup_info(btf_ext, &param);
2943 static int btf_ext_setup_core_relos(struct btf_ext *btf_ext)
2946 .off = btf_ext->hdr->core_relo_off,
2947 .len = btf_ext->hdr->core_relo_len,
2949 .ext_info = &btf_ext->core_relo_info,
2953 return btf_ext_setup_info(btf_ext, &param);
2992 void btf_ext__free(struct btf_ext *btf_ext)
2994 if (IS_ERR_OR_NULL(btf_ext))
2996 free(btf_ext->func_info.sec_idxs);
2997 free(btf_ext->line_info.sec_idxs);
2998 free(btf_ext->core_relo_info.sec_idxs);
2999 free(btf_ext->data);
3000 free(btf_ext);
3003 struct btf_ext *btf_ext__new(const __u8 *data, __u32 size)
3005 struct btf_ext *btf_ext;
3008 btf_ext = calloc(1, sizeof(struct btf_ext));
3009 if (!btf_ext)
3012 btf_ext->data_size = size;
3013 btf_ext->data = malloc(size);
3014 if (!btf_ext->data) {
3018 memcpy(btf_ext->data, data, size);
3020 err = btf_ext_parse_hdr(btf_ext->data, size);
3024 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, line_info_len)) {
3029 err = btf_ext_setup_func_info(btf_ext);
3033 err = btf_ext_setup_line_info(btf_ext);
3037 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len))
3040 err = btf_ext_setup_core_relos(btf_ext);
3046 btf_ext__free(btf_ext);
3050 return btf_ext;
3053 const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size)
3055 *size = btf_ext->data_size;
3056 return btf_ext->data;
3060 const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
3082 * information. If optional `struct btf_ext` representing '.BTF.ext' ELF section
3289 struct btf_ext *btf_ext;
3403 d->btf_ext = OPTS_GET(opts, btf_ext, NULL);
3463 if (!d->btf_ext)
3466 r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx);
4928 if (!d->btf_ext)
4931 r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d);
5136 int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx)
5142 seg = &btf_ext->func_info;
5153 seg = &btf_ext->core_relo_info;
5167 int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx)
5173 seg = &btf_ext->func_info;
5180 seg = &btf_ext->line_info;
5198 seg = &btf_ext->core_relo_info;