Lines Matching refs:btf_ext
1194 struct btf_ext **btf_ext) in btf_parse_elf() argument
1270 if (btf_ext && secs.btf_ext_data) { in btf_parse_elf()
1271 *btf_ext = btf_ext__new(secs.btf_ext_data->d_buf, secs.btf_ext_data->d_size); in btf_parse_elf()
1272 if (IS_ERR(*btf_ext)) { in btf_parse_elf()
1273 err = PTR_ERR(*btf_ext); in btf_parse_elf()
1276 } else if (btf_ext) { in btf_parse_elf()
1277 *btf_ext = NULL; in btf_parse_elf()
1287 if (btf_ext) in btf_parse_elf()
1288 btf_ext__free(*btf_ext); in btf_parse_elf()
1295 struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext) in btf__parse_elf() argument
1297 return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext)); in btf__parse_elf()
1409 static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext) in btf_parse() argument
1414 if (btf_ext) in btf_parse()
1415 *btf_ext = NULL; in btf_parse()
1423 return btf_parse_elf(path, base_btf, btf_ext); in btf_parse()
1426 struct btf *btf__parse(const char *path, struct btf_ext **btf_ext) in btf__parse() argument
1428 return libbpf_ptr(btf_parse(path, NULL, btf_ext)); in btf__parse()
3011 static int btf_ext_parse_sec_info(struct btf_ext *btf_ext, in btf_ext_parse_sec_info() argument
3031 info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off; in btf_ext_parse_sec_info()
3034 if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) { in btf_ext_parse_sec_info()
3108 static int btf_ext_parse_info(struct btf_ext *btf_ext, bool is_native) in btf_ext_parse_info() argument
3111 .off = btf_ext->hdr->func_info_off, in btf_ext_parse_info()
3112 .len = btf_ext->hdr->func_info_len, in btf_ext_parse_info()
3114 .ext_info = &btf_ext->func_info, in btf_ext_parse_info()
3118 .off = btf_ext->hdr->line_info_off, in btf_ext_parse_info()
3119 .len = btf_ext->hdr->line_info_len, in btf_ext_parse_info()
3121 .ext_info = &btf_ext->line_info, in btf_ext_parse_info()
3126 .ext_info = &btf_ext->core_relo_info, in btf_ext_parse_info()
3131 err = btf_ext_parse_sec_info(btf_ext, &func_info, is_native); in btf_ext_parse_info()
3135 err = btf_ext_parse_sec_info(btf_ext, &line_info, is_native); in btf_ext_parse_info()
3139 if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len)) in btf_ext_parse_info()
3142 core_relo.off = btf_ext->hdr->core_relo_off; in btf_ext_parse_info()
3143 core_relo.len = btf_ext->hdr->core_relo_len; in btf_ext_parse_info()
3144 err = btf_ext_parse_sec_info(btf_ext, &core_relo, is_native); in btf_ext_parse_info()
3209 static void btf_ext_bswap_info(struct btf_ext *btf_ext, void *data) in btf_ext_bswap_info() argument
3211 const bool is_native = btf_ext->swapped_endian; in btf_ext_bswap_info()
3235 static int btf_ext_parse(struct btf_ext *btf_ext) in btf_ext_parse() argument
3237 __u32 hdr_len, data_size = btf_ext->data_size; in btf_ext_parse()
3238 struct btf_ext_header *hdr = btf_ext->hdr; in btf_ext_parse()
3283 btf_ext_bswap_hdr(btf_ext->hdr); in btf_ext_parse()
3286 err = btf_ext_parse_info(btf_ext, !swapped_endian); in btf_ext_parse()
3292 btf_ext_bswap_info(btf_ext, btf_ext->data); in btf_ext_parse()
3299 btf_ext->swapped_endian = swapped_endian; in btf_ext_parse()
3303 void btf_ext__free(struct btf_ext *btf_ext) in btf_ext__free() argument
3305 if (IS_ERR_OR_NULL(btf_ext)) in btf_ext__free()
3307 free(btf_ext->func_info.sec_idxs); in btf_ext__free()
3308 free(btf_ext->line_info.sec_idxs); in btf_ext__free()
3309 free(btf_ext->core_relo_info.sec_idxs); in btf_ext__free()
3310 free(btf_ext->data); in btf_ext__free()
3311 free(btf_ext->data_swapped); in btf_ext__free()
3312 free(btf_ext); in btf_ext__free()
3315 struct btf_ext *btf_ext__new(const __u8 *data, __u32 size) in btf_ext__new()
3317 struct btf_ext *btf_ext; in btf_ext__new() local
3320 btf_ext = calloc(1, sizeof(struct btf_ext)); in btf_ext__new()
3321 if (!btf_ext) in btf_ext__new()
3324 btf_ext->data_size = size; in btf_ext__new()
3325 btf_ext->data = malloc(size); in btf_ext__new()
3326 if (!btf_ext->data) { in btf_ext__new()
3330 memcpy(btf_ext->data, data, size); in btf_ext__new()
3332 err = btf_ext_parse(btf_ext); in btf_ext__new()
3336 btf_ext__free(btf_ext); in btf_ext__new()
3340 return btf_ext; in btf_ext__new()
3343 static void *btf_ext_raw_data(const struct btf_ext *btf_ext_ro, bool swap_endian) in btf_ext_raw_data()
3345 struct btf_ext *btf_ext = (struct btf_ext *)btf_ext_ro; in btf_ext_raw_data() local
3346 const __u32 data_sz = btf_ext->data_size; in btf_ext_raw_data()
3351 return btf_ext->data; in btf_ext_raw_data()
3352 else if (btf_ext->data_swapped) in btf_ext_raw_data()
3353 return btf_ext->data_swapped; in btf_ext_raw_data()
3359 memcpy(data, btf_ext->data, data_sz); in btf_ext_raw_data()
3361 btf_ext_bswap_info(btf_ext, data); in btf_ext_raw_data()
3363 btf_ext->data_swapped = data; in btf_ext_raw_data()
3367 const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size) in btf_ext__raw_data() argument
3371 data = btf_ext_raw_data(btf_ext, btf_ext->swapped_endian); in btf_ext__raw_data()
3375 *size = btf_ext->data_size; in btf_ext__raw_data()
3380 const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
3382 enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext) in btf_ext__endianness() argument
3385 return btf_ext->swapped_endian ? BTF_LITTLE_ENDIAN : BTF_BIG_ENDIAN; in btf_ext__endianness()
3387 return btf_ext->swapped_endian ? BTF_BIG_ENDIAN : BTF_LITTLE_ENDIAN; in btf_ext__endianness()
3390 int btf_ext__set_endianness(struct btf_ext *btf_ext, enum btf_endianness endian) in btf_ext__set_endianness() argument
3395 btf_ext->swapped_endian = is_host_big_endian() != (endian == BTF_BIG_ENDIAN); in btf_ext__set_endianness()
3397 if (!btf_ext->swapped_endian) { in btf_ext__set_endianness()
3398 free(btf_ext->data_swapped); in btf_ext__set_endianness()
3399 btf_ext->data_swapped = NULL; in btf_ext__set_endianness()
3630 struct btf_ext *btf_ext; member
3744 d->btf_ext = OPTS_GET(opts, btf_ext, NULL); in btf_dedup_new()
3812 if (!d->btf_ext) in btf_for_each_str_off()
3815 r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx); in btf_for_each_str_off()
5347 if (!d->btf_ext) in btf_dedup_remap_types()
5350 r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d); in btf_dedup_remap_types()
5429 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
5435 seg = &btf_ext->func_info; in btf_ext_visit_type_ids()
5446 seg = &btf_ext->core_relo_info; in btf_ext_visit_type_ids()
5460 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
5466 seg = &btf_ext->func_info; in btf_ext_visit_str_offs()
5473 seg = &btf_ext->line_info; in btf_ext_visit_str_offs()
5491 seg = &btf_ext->core_relo_info; in btf_ext_visit_str_offs()