Symbol: btf_ext
tools/bpf/bpftool/gen.c
2413
struct btf_ext *btf_ext = NULL;
tools/bpf/bpftool/gen.c
2419
btf = btf__parse(obj_path, &btf_ext);
tools/bpf/bpftool/gen.c
2426
if (!btf_ext) {
tools/bpf/bpftool/gen.c
2433
if (btf_ext->core_relo_info.len == 0) {
tools/bpf/bpftool/gen.c
2444
seg = &btf_ext->core_relo_info;
tools/bpf/bpftool/gen.c
2480
btf_ext__free(btf_ext);
tools/lib/bpf/btf.c
1448
struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1524
if (btf_ext && secs.btf_ext_data) {
tools/lib/bpf/btf.c
1525
*btf_ext = btf_ext__new(secs.btf_ext_data->d_buf, secs.btf_ext_data->d_size);
tools/lib/bpf/btf.c
1526
if (IS_ERR(*btf_ext)) {
tools/lib/bpf/btf.c
1527
err = PTR_ERR(*btf_ext);
tools/lib/bpf/btf.c
1530
} else if (btf_ext) {
tools/lib/bpf/btf.c
1531
*btf_ext = NULL;
tools/lib/bpf/btf.c
1541
if (btf_ext)
tools/lib/bpf/btf.c
1542
btf_ext__free(*btf_ext);
tools/lib/bpf/btf.c
1549
struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1551
return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext));
tools/lib/bpf/btf.c
1663
static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1668
if (btf_ext)
tools/lib/bpf/btf.c
1669
*btf_ext = NULL;
tools/lib/bpf/btf.c
1677
return btf_parse_elf(path, base_btf, btf_ext);
tools/lib/bpf/btf.c
1680
struct btf *btf__parse(const char *path, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1682
return libbpf_ptr(btf_parse(path, NULL, btf_ext));
tools/lib/bpf/btf.c
3361
static int btf_ext_parse_sec_info(struct btf_ext *btf_ext,
tools/lib/bpf/btf.c
3381
info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off;
tools/lib/bpf/btf.c
3384
if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) {
tools/lib/bpf/btf.c
3458
static int btf_ext_parse_info(struct btf_ext *btf_ext, bool is_native)
tools/lib/bpf/btf.c
3461
.off = btf_ext->hdr->func_info_off,
tools/lib/bpf/btf.c
3462
.len = btf_ext->hdr->func_info_len,
tools/lib/bpf/btf.c
3464
.ext_info = &btf_ext->func_info,
tools/lib/bpf/btf.c
3468
.off = btf_ext->hdr->line_info_off,
tools/lib/bpf/btf.c
3469
.len = btf_ext->hdr->line_info_len,
tools/lib/bpf/btf.c
3471
.ext_info = &btf_ext->line_info,
tools/lib/bpf/btf.c
3476
.ext_info = &btf_ext->core_relo_info,
tools/lib/bpf/btf.c
3481
err = btf_ext_parse_sec_info(btf_ext, &func_info, is_native);
tools/lib/bpf/btf.c
3485
err = btf_ext_parse_sec_info(btf_ext, &line_info, is_native);
tools/lib/bpf/btf.c
3489
if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len))
tools/lib/bpf/btf.c
3492
core_relo.off = btf_ext->hdr->core_relo_off;
tools/lib/bpf/btf.c
3493
core_relo.len = btf_ext->hdr->core_relo_len;
tools/lib/bpf/btf.c
3494
err = btf_ext_parse_sec_info(btf_ext, &core_relo, is_native);
tools/lib/bpf/btf.c
3559
static void btf_ext_bswap_info(struct btf_ext *btf_ext, void *data)
tools/lib/bpf/btf.c
3561
const bool is_native = btf_ext->swapped_endian;
tools/lib/bpf/btf.c
3585
static int btf_ext_parse(struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3587
__u32 hdr_len, data_size = btf_ext->data_size;
tools/lib/bpf/btf.c
3588
struct btf_ext_header *hdr = btf_ext->hdr;
tools/lib/bpf/btf.c
3633
btf_ext_bswap_hdr(btf_ext->hdr);
tools/lib/bpf/btf.c
3636
err = btf_ext_parse_info(btf_ext, !swapped_endian);
tools/lib/bpf/btf.c
3642
btf_ext_bswap_info(btf_ext, btf_ext->data);
tools/lib/bpf/btf.c
3649
btf_ext->swapped_endian = swapped_endian;
tools/lib/bpf/btf.c
3653
void btf_ext__free(struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3655
if (IS_ERR_OR_NULL(btf_ext))
tools/lib/bpf/btf.c
3657
free(btf_ext->func_info.sec_idxs);
tools/lib/bpf/btf.c
3658
free(btf_ext->line_info.sec_idxs);
tools/lib/bpf/btf.c
3659
free(btf_ext->core_relo_info.sec_idxs);
tools/lib/bpf/btf.c
3660
free(btf_ext->data);
tools/lib/bpf/btf.c
3661
free(btf_ext->data_swapped);
tools/lib/bpf/btf.c
3662
free(btf_ext);
tools/lib/bpf/btf.c
3665
struct btf_ext *btf_ext__new(const __u8 *data, __u32 size)
tools/lib/bpf/btf.c
3667
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
3670
btf_ext = calloc(1, sizeof(struct btf_ext));
tools/lib/bpf/btf.c
3671
if (!btf_ext)
tools/lib/bpf/btf.c
3674
btf_ext->data_size = size;
tools/lib/bpf/btf.c
3675
btf_ext->data = malloc(size);
tools/lib/bpf/btf.c
3676
if (!btf_ext->data) {
tools/lib/bpf/btf.c
3680
memcpy(btf_ext->data, data, size);
tools/lib/bpf/btf.c
3682
err = btf_ext_parse(btf_ext);
tools/lib/bpf/btf.c
3686
btf_ext__free(btf_ext);
tools/lib/bpf/btf.c
3690
return btf_ext;
tools/lib/bpf/btf.c
3693
static void *btf_ext_raw_data(const struct btf_ext *btf_ext_ro, bool swap_endian)
tools/lib/bpf/btf.c
3695
struct btf_ext *btf_ext = (struct btf_ext *)btf_ext_ro;
tools/lib/bpf/btf.c
3696
const __u32 data_sz = btf_ext->data_size;
tools/lib/bpf/btf.c
3701
return btf_ext->data;
tools/lib/bpf/btf.c
3702
else if (btf_ext->data_swapped)
tools/lib/bpf/btf.c
3703
return btf_ext->data_swapped;
tools/lib/bpf/btf.c
3709
memcpy(data, btf_ext->data, data_sz);
tools/lib/bpf/btf.c
3711
btf_ext_bswap_info(btf_ext, data);
tools/lib/bpf/btf.c
3713
btf_ext->data_swapped = data;
tools/lib/bpf/btf.c
3717
const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size)
tools/lib/bpf/btf.c
3721
data = btf_ext_raw_data(btf_ext, btf_ext->swapped_endian);
tools/lib/bpf/btf.c
3725
*size = btf_ext->data_size;
tools/lib/bpf/btf.c
3730
const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
tools/lib/bpf/btf.c
3732
enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3735
return btf_ext->swapped_endian ? BTF_LITTLE_ENDIAN : BTF_BIG_ENDIAN;
tools/lib/bpf/btf.c
3737
return btf_ext->swapped_endian ? BTF_BIG_ENDIAN : BTF_LITTLE_ENDIAN;
tools/lib/bpf/btf.c
3740
int btf_ext__set_endianness(struct btf_ext *btf_ext, enum btf_endianness endian)
tools/lib/bpf/btf.c
3745
btf_ext->swapped_endian = is_host_big_endian() != (endian == BTF_BIG_ENDIAN);
tools/lib/bpf/btf.c
3747
if (!btf_ext->swapped_endian) {
tools/lib/bpf/btf.c
3748
free(btf_ext->data_swapped);
tools/lib/bpf/btf.c
3749
btf_ext->data_swapped = NULL;
tools/lib/bpf/btf.c
3979
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
4093
d->btf_ext = OPTS_GET(opts, btf_ext, NULL);
tools/lib/bpf/btf.c
4161
if (!d->btf_ext)
tools/lib/bpf/btf.c
4164
r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx);
tools/lib/bpf/btf.c
5759
if (!d->btf_ext)
tools/lib/bpf/btf.c
5762
r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d);
tools/lib/bpf/btf.c
5841
int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx)
tools/lib/bpf/btf.c
5847
seg = &btf_ext->func_info;
tools/lib/bpf/btf.c
5858
seg = &btf_ext->core_relo_info;
tools/lib/bpf/btf.c
5872
int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx)
tools/lib/bpf/btf.c
5878
seg = &btf_ext->func_info;
tools/lib/bpf/btf.c
5885
seg = &btf_ext->line_info;
tools/lib/bpf/btf.c
5903
seg = &btf_ext->core_relo_info;
tools/lib/bpf/btf.c
6273
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
6355
btf_ext = OPTS_GET(opts, btf_ext, NULL);
tools/lib/bpf/btf.c
6356
if (btf_ext) {
tools/lib/bpf/btf.c
6357
err = btf_ext_visit_type_ids(btf_ext, btf_permute_remap_type_id, &p);
tools/lib/bpf/btf.h
157
LIBBPF_API struct btf *btf__parse(const char *path, struct btf_ext **btf_ext);
tools/lib/bpf/btf.h
159
LIBBPF_API struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext);
tools/lib/bpf/btf.h
192
LIBBPF_API struct btf_ext *btf_ext__new(const __u8 *data, __u32 size);
tools/lib/bpf/btf.h
193
LIBBPF_API void btf_ext__free(struct btf_ext *btf_ext);
tools/lib/bpf/btf.h
194
LIBBPF_API const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size);
tools/lib/bpf/btf.h
195
LIBBPF_API enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext);
tools/lib/bpf/btf.h
196
LIBBPF_API int btf_ext__set_endianness(struct btf_ext *btf_ext,
tools/lib/bpf/btf.h
25
struct btf_ext;
tools/lib/bpf/btf.h
278
struct btf_ext *btf_ext;
tools/lib/bpf/btf.h
307
struct btf_ext *btf_ext;
tools/lib/bpf/btf.h
310
#define btf_permute_opts__last_field btf_ext
tools/lib/bpf/libbpf.c
3356
obj->btf_ext = btf_ext__new(btf_ext_data->d_buf, btf_ext_data->d_size);
tools/lib/bpf/libbpf.c
3357
err = libbpf_get_error(obj->btf_ext);
tools/lib/bpf/libbpf.c
3361
obj->btf_ext = NULL;
tools/lib/bpf/libbpf.c
3366
ext_segs[0] = &obj->btf_ext->func_info;
tools/lib/bpf/libbpf.c
3367
ext_segs[1] = &obj->btf_ext->line_info;
tools/lib/bpf/libbpf.c
3368
ext_segs[2] = &obj->btf_ext->core_relo_info;
tools/lib/bpf/libbpf.c
3566
if (obj->btf_ext && obj->btf_ext->core_relo_info.len && !obj->btf_custom_path)
tools/lib/bpf/libbpf.c
6100
if (obj->btf_ext->core_relo_info.len == 0)
tools/lib/bpf/libbpf.c
6118
seg = &obj->btf_ext->core_relo_info;
tools/lib/bpf/libbpf.c
6607
if (!obj->btf_ext || !kernel_supports(obj, FEAT_BTF_FUNC))
tools/lib/bpf/libbpf.c
6616
err = adjust_prog_btf_ext_info(obj, prog, &obj->btf_ext->func_info,
tools/lib/bpf/libbpf.c
6644
err = adjust_prog_btf_ext_info(obj, prog, &obj->btf_ext->line_info,
tools/lib/bpf/libbpf.c
7306
if (!obj->btf_ext || !prog->func_info)
tools/lib/bpf/libbpf.c
734
struct btf_ext *btf_ext;
tools/lib/bpf/libbpf.c
7438
if (obj->btf_ext) {
tools/lib/bpf/libbpf.c
9597
btf_ext__free(obj->btf_ext);
tools/lib/bpf/libbpf_internal.h
597
int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx);
tools/lib/bpf/libbpf_internal.h
598
int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx);
tools/lib/bpf/libbpf_legacy.h
126
struct btf_ext;
tools/lib/bpf/libbpf_legacy.h
134
LIBBPF_API const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
tools/lib/bpf/linker.c
1125
if (!obj->btf_ext)
tools/lib/bpf/linker.c
1132
err = err ?: btf_ext_visit_type_ids(obj->btf_ext, check_btf_type_id, obj->btf);
tools/lib/bpf/linker.c
1133
err = err ?: btf_ext_visit_str_offs(obj->btf_ext, check_btf_str_off, obj->btf);
tools/lib/bpf/linker.c
154
struct btf_ext *btf_ext;
tools/lib/bpf/linker.c
208
btf_ext__free(linker->btf_ext);
tools/lib/bpf/linker.c
2638
if (!obj->btf_ext)
tools/lib/bpf/linker.c
2641
rec_sz = obj->btf_ext->func_info.rec_size;
tools/lib/bpf/linker.c
2642
for_each_btf_ext_sec(&obj->btf_ext->func_info, ext_sec) {
tools/lib/bpf/linker.c
2660
for_each_btf_ext_rec(&obj->btf_ext->func_info, ext_sec, i, src_rec) {
tools/lib/bpf/linker.c
2670
rec_sz = obj->btf_ext->line_info.rec_size;
tools/lib/bpf/linker.c
2671
for_each_btf_ext_sec(&obj->btf_ext->line_info, ext_sec) {
tools/lib/bpf/linker.c
2689
for_each_btf_ext_rec(&obj->btf_ext->line_info, ext_sec, i, src_rec) {
tools/lib/bpf/linker.c
2712
rec_sz = obj->btf_ext->core_relo_info.rec_size;
tools/lib/bpf/linker.c
2713
for_each_btf_ext_sec(&obj->btf_ext->core_relo_info, ext_sec) {
tools/lib/bpf/linker.c
2731
for_each_btf_ext_rec(&obj->btf_ext->core_relo_info, ext_sec, i, src_rec) {
tools/lib/bpf/linker.c
2900
opts.btf_ext = linker->btf_ext;
tools/lib/bpf/linker.c
2911
if (linker->btf_ext)
tools/lib/bpf/linker.c
2912
btf_ext__set_endianness(linker->btf_ext, link_endianness);
tools/lib/bpf/linker.c
2926
if (linker->btf_ext) {
tools/lib/bpf/linker.c
2927
raw_data = btf_ext__raw_data(linker->btf_ext, &raw_sz);
tools/lib/bpf/linker.c
3105
linker->btf_ext = btf_ext__new(data, total_sz);
tools/lib/bpf/linker.c
3106
err = libbpf_get_error(linker->btf_ext);
tools/lib/bpf/linker.c
3108
linker->btf_ext = NULL;
tools/lib/bpf/linker.c
509
btf_ext__free(obj.btf_ext);
tools/lib/bpf/linker.c
64
struct btf_ext *btf_ext;
tools/lib/bpf/linker.c
794
obj->btf_ext = btf_ext__new(data->d_buf, shdr->sh_size);
tools/lib/bpf/linker.c
795
err = libbpf_get_error(obj->btf_ext);
tools/testing/selftests/bpf/prog_tests/btf.c
4861
struct btf_ext *btf_ext = NULL;
tools/testing/selftests/bpf/prog_tests/btf.c
4876
btf = btf__parse_elf(test->file, &btf_ext);
tools/testing/selftests/bpf/prog_tests/btf.c
4888
has_btf_ext = btf_ext != NULL;
tools/testing/selftests/bpf/prog_tests/btf.c
4889
btf_ext__free(btf_ext);