Lines Matching refs:btf_ext

1167 				 struct btf_ext **btf_ext)  in btf_parse_elf()  argument
1243 if (btf_ext && secs.btf_ext_data) { in btf_parse_elf()
1244 *btf_ext = btf_ext__new(secs.btf_ext_data->d_buf, secs.btf_ext_data->d_size); in btf_parse_elf()
1245 if (IS_ERR(*btf_ext)) { in btf_parse_elf()
1246 err = PTR_ERR(*btf_ext); in btf_parse_elf()
1249 } else if (btf_ext) { in btf_parse_elf()
1250 *btf_ext = NULL; in btf_parse_elf()
1260 if (btf_ext) in btf_parse_elf()
1261 btf_ext__free(*btf_ext); in btf_parse_elf()
1268 struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext) in btf__parse_elf() argument
1270 return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext)); in btf__parse_elf()
1351 static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext) in btf_parse() argument
1356 if (btf_ext) in btf_parse()
1357 *btf_ext = NULL; in btf_parse()
1365 return btf_parse_elf(path, base_btf, btf_ext); in btf_parse()
1368 struct btf *btf__parse(const char *path, struct btf_ext **btf_ext) in btf__parse() argument
1370 return libbpf_ptr(btf_parse(path, NULL, btf_ext)); in btf__parse()
2955 static int btf_ext_parse_sec_info(struct btf_ext *btf_ext, in btf_ext_parse_sec_info() argument
2975 info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off; in btf_ext_parse_sec_info()
2978 if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) { in btf_ext_parse_sec_info()
3052 static int btf_ext_parse_info(struct btf_ext *btf_ext, bool is_native) in btf_ext_parse_info() argument
3055 .off = btf_ext->hdr->func_info_off, in btf_ext_parse_info()
3056 .len = btf_ext->hdr->func_info_len, in btf_ext_parse_info()
3058 .ext_info = &btf_ext->func_info, in btf_ext_parse_info()
3062 .off = btf_ext->hdr->line_info_off, in btf_ext_parse_info()
3063 .len = btf_ext->hdr->line_info_len, in btf_ext_parse_info()
3065 .ext_info = &btf_ext->line_info, in btf_ext_parse_info()
3070 .ext_info = &btf_ext->core_relo_info, in btf_ext_parse_info()
3075 err = btf_ext_parse_sec_info(btf_ext, &func_info, is_native); in btf_ext_parse_info()
3079 err = btf_ext_parse_sec_info(btf_ext, &line_info, is_native); in btf_ext_parse_info()
3083 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len)) in btf_ext_parse_info()
3086 core_relo.off = btf_ext->hdr->core_relo_off; in btf_ext_parse_info()
3087 core_relo.len = btf_ext->hdr->core_relo_len; in btf_ext_parse_info()
3088 err = btf_ext_parse_sec_info(btf_ext, &core_relo, is_native); in btf_ext_parse_info()
3153 static void btf_ext_bswap_info(struct btf_ext *btf_ext, void *data) in btf_ext_bswap_info() argument
3155 const bool is_native = btf_ext->swapped_endian; in btf_ext_bswap_info()
3179 static int btf_ext_parse(struct btf_ext *btf_ext) in btf_ext_parse() argument
3181 __u32 hdr_len, data_size = btf_ext->data_size; in btf_ext_parse()
3182 struct btf_ext_header *hdr = btf_ext->hdr; in btf_ext_parse()
3227 btf_ext_bswap_hdr(btf_ext->hdr); in btf_ext_parse()
3230 err = btf_ext_parse_info(btf_ext, !swapped_endian); in btf_ext_parse()
3236 btf_ext_bswap_info(btf_ext, btf_ext->data); in btf_ext_parse()
3243 btf_ext->swapped_endian = swapped_endian; in btf_ext_parse()
3247 void btf_ext__free(struct btf_ext *btf_ext) in btf_ext__free() argument
3249 if (IS_ERR_OR_NULL(btf_ext)) in btf_ext__free()
3251 free(btf_ext->func_info.sec_idxs); in btf_ext__free()
3252 free(btf_ext->line_info.sec_idxs); in btf_ext__free()
3253 free(btf_ext->core_relo_info.sec_idxs); in btf_ext__free()
3254 free(btf_ext->data); in btf_ext__free()
3255 free(btf_ext->data_swapped); in btf_ext__free()
3256 free(btf_ext); in btf_ext__free()
3259 struct btf_ext *btf_ext__new(const __u8 *data, __u32 size) in btf_ext__new()
3261 struct btf_ext *btf_ext; in btf_ext__new() local
3264 btf_ext = calloc(1, sizeof(struct btf_ext)); in btf_ext__new()
3265 if (!btf_ext) in btf_ext__new()
3268 btf_ext->data_size = size; in btf_ext__new()
3269 btf_ext->data = malloc(size); in btf_ext__new()
3270 if (!btf_ext->data) { in btf_ext__new()
3274 memcpy(btf_ext->data, data, size); in btf_ext__new()
3276 err = btf_ext_parse(btf_ext); in btf_ext__new()
3280 btf_ext__free(btf_ext); in btf_ext__new()
3284 return btf_ext; in btf_ext__new()
3287 static void *btf_ext_raw_data(const struct btf_ext *btf_ext_ro, bool swap_endian) in btf_ext_raw_data()
3289 struct btf_ext *btf_ext = (struct btf_ext *)btf_ext_ro; in btf_ext_raw_data() local
3290 const __u32 data_sz = btf_ext->data_size; in btf_ext_raw_data()
3295 return btf_ext->data; in btf_ext_raw_data()
3296 else if (btf_ext->data_swapped) in btf_ext_raw_data()
3297 return btf_ext->data_swapped; in btf_ext_raw_data()
3303 memcpy(data, btf_ext->data, data_sz); in btf_ext_raw_data()
3305 btf_ext_bswap_info(btf_ext, data); in btf_ext_raw_data()
3307 btf_ext->data_swapped = data; in btf_ext_raw_data()
3311 const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size) in btf_ext__raw_data() argument
3315 data = btf_ext_raw_data(btf_ext, btf_ext->swapped_endian); in btf_ext__raw_data()
3319 *size = btf_ext->data_size; in btf_ext__raw_data()
3324 const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
3326 enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext) in btf_ext__endianness() argument
3329 return btf_ext->swapped_endian ? BTF_LITTLE_ENDIAN : BTF_BIG_ENDIAN; in btf_ext__endianness()
3331 return btf_ext->swapped_endian ? BTF_BIG_ENDIAN : BTF_LITTLE_ENDIAN; in btf_ext__endianness()
3334 int btf_ext__set_endianness(struct btf_ext *btf_ext, enum btf_endianness endian) in btf_ext__set_endianness() argument
3339 btf_ext->swapped_endian = is_host_big_endian() != (endian == BTF_BIG_ENDIAN); in btf_ext__set_endianness()
3341 if (!btf_ext->swapped_endian) { in btf_ext__set_endianness()
3342 free(btf_ext->data_swapped); in btf_ext__set_endianness()
3343 btf_ext->data_swapped = NULL; in btf_ext__set_endianness()
3574 struct btf_ext *btf_ext; member
3688 d->btf_ext = OPTS_GET(opts, btf_ext, NULL); in btf_dedup_new()
3756 if (!d->btf_ext) in btf_for_each_str_off()
3759 r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx); in btf_for_each_str_off()
5234 if (!d->btf_ext) in btf_dedup_remap_types()
5237 r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d); in btf_dedup_remap_types()
5313 int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx) in btf_ext_visit_type_ids() argument
5319 seg = &btf_ext->func_info; in btf_ext_visit_type_ids()
5330 seg = &btf_ext->core_relo_info; in btf_ext_visit_type_ids()
5344 int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx) in btf_ext_visit_str_offs() argument
5350 seg = &btf_ext->func_info; in btf_ext_visit_str_offs()
5357 seg = &btf_ext->line_info; in btf_ext_visit_str_offs()
5375 seg = &btf_ext->core_relo_info; in btf_ext_visit_str_offs()