Symbol: btf_ext
tools/bpf/bpftool/gen.c
2411
struct btf_ext *btf_ext = NULL;
tools/bpf/bpftool/gen.c
2417
btf = btf__parse(obj_path, &btf_ext);
tools/bpf/bpftool/gen.c
2424
if (!btf_ext) {
tools/bpf/bpftool/gen.c
2431
if (btf_ext->core_relo_info.len == 0) {
tools/bpf/bpftool/gen.c
2442
seg = &btf_ext->core_relo_info;
tools/bpf/bpftool/gen.c
2478
btf_ext__free(btf_ext);
tools/lib/bpf/btf.c
1257
struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1333
if (btf_ext && secs.btf_ext_data) {
tools/lib/bpf/btf.c
1334
*btf_ext = btf_ext__new(secs.btf_ext_data->d_buf, secs.btf_ext_data->d_size);
tools/lib/bpf/btf.c
1335
if (IS_ERR(*btf_ext)) {
tools/lib/bpf/btf.c
1336
err = PTR_ERR(*btf_ext);
tools/lib/bpf/btf.c
1339
} else if (btf_ext) {
tools/lib/bpf/btf.c
1340
*btf_ext = NULL;
tools/lib/bpf/btf.c
1350
if (btf_ext)
tools/lib/bpf/btf.c
1351
btf_ext__free(*btf_ext);
tools/lib/bpf/btf.c
1358
struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1360
return libbpf_ptr(btf_parse_elf(path, NULL, btf_ext));
tools/lib/bpf/btf.c
1472
static struct btf *btf_parse(const char *path, struct btf *base_btf, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1477
if (btf_ext)
tools/lib/bpf/btf.c
1478
*btf_ext = NULL;
tools/lib/bpf/btf.c
1486
return btf_parse_elf(path, base_btf, btf_ext);
tools/lib/bpf/btf.c
1489
struct btf *btf__parse(const char *path, struct btf_ext **btf_ext)
tools/lib/bpf/btf.c
1491
return libbpf_ptr(btf_parse(path, NULL, btf_ext));
tools/lib/bpf/btf.c
3075
static int btf_ext_parse_sec_info(struct btf_ext *btf_ext,
tools/lib/bpf/btf.c
3095
info = btf_ext->data + btf_ext->hdr->hdr_len + ext_sec->off;
tools/lib/bpf/btf.c
3098
if (btf_ext->data + btf_ext->data_size < info + ext_sec->len) {
tools/lib/bpf/btf.c
3172
static int btf_ext_parse_info(struct btf_ext *btf_ext, bool is_native)
tools/lib/bpf/btf.c
3175
.off = btf_ext->hdr->func_info_off,
tools/lib/bpf/btf.c
3176
.len = btf_ext->hdr->func_info_len,
tools/lib/bpf/btf.c
3178
.ext_info = &btf_ext->func_info,
tools/lib/bpf/btf.c
3182
.off = btf_ext->hdr->line_info_off,
tools/lib/bpf/btf.c
3183
.len = btf_ext->hdr->line_info_len,
tools/lib/bpf/btf.c
3185
.ext_info = &btf_ext->line_info,
tools/lib/bpf/btf.c
3190
.ext_info = &btf_ext->core_relo_info,
tools/lib/bpf/btf.c
3195
err = btf_ext_parse_sec_info(btf_ext, &func_info, is_native);
tools/lib/bpf/btf.c
3199
err = btf_ext_parse_sec_info(btf_ext, &line_info, is_native);
tools/lib/bpf/btf.c
3203
if (btf_ext->hdr->hdr_len < offsetofend(struct btf_ext_header, core_relo_len))
tools/lib/bpf/btf.c
3206
core_relo.off = btf_ext->hdr->core_relo_off;
tools/lib/bpf/btf.c
3207
core_relo.len = btf_ext->hdr->core_relo_len;
tools/lib/bpf/btf.c
3208
err = btf_ext_parse_sec_info(btf_ext, &core_relo, is_native);
tools/lib/bpf/btf.c
3273
static void btf_ext_bswap_info(struct btf_ext *btf_ext, void *data)
tools/lib/bpf/btf.c
3275
const bool is_native = btf_ext->swapped_endian;
tools/lib/bpf/btf.c
3299
static int btf_ext_parse(struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3301
__u32 hdr_len, data_size = btf_ext->data_size;
tools/lib/bpf/btf.c
3302
struct btf_ext_header *hdr = btf_ext->hdr;
tools/lib/bpf/btf.c
3347
btf_ext_bswap_hdr(btf_ext->hdr);
tools/lib/bpf/btf.c
3350
err = btf_ext_parse_info(btf_ext, !swapped_endian);
tools/lib/bpf/btf.c
3356
btf_ext_bswap_info(btf_ext, btf_ext->data);
tools/lib/bpf/btf.c
3363
btf_ext->swapped_endian = swapped_endian;
tools/lib/bpf/btf.c
3367
void btf_ext__free(struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3369
if (IS_ERR_OR_NULL(btf_ext))
tools/lib/bpf/btf.c
3371
free(btf_ext->func_info.sec_idxs);
tools/lib/bpf/btf.c
3372
free(btf_ext->line_info.sec_idxs);
tools/lib/bpf/btf.c
3373
free(btf_ext->core_relo_info.sec_idxs);
tools/lib/bpf/btf.c
3374
free(btf_ext->data);
tools/lib/bpf/btf.c
3375
free(btf_ext->data_swapped);
tools/lib/bpf/btf.c
3376
free(btf_ext);
tools/lib/bpf/btf.c
3379
struct btf_ext *btf_ext__new(const __u8 *data, __u32 size)
tools/lib/bpf/btf.c
3381
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
3384
btf_ext = calloc(1, sizeof(struct btf_ext));
tools/lib/bpf/btf.c
3385
if (!btf_ext)
tools/lib/bpf/btf.c
3388
btf_ext->data_size = size;
tools/lib/bpf/btf.c
3389
btf_ext->data = malloc(size);
tools/lib/bpf/btf.c
3390
if (!btf_ext->data) {
tools/lib/bpf/btf.c
3394
memcpy(btf_ext->data, data, size);
tools/lib/bpf/btf.c
3396
err = btf_ext_parse(btf_ext);
tools/lib/bpf/btf.c
3400
btf_ext__free(btf_ext);
tools/lib/bpf/btf.c
3404
return btf_ext;
tools/lib/bpf/btf.c
3407
static void *btf_ext_raw_data(const struct btf_ext *btf_ext_ro, bool swap_endian)
tools/lib/bpf/btf.c
3409
struct btf_ext *btf_ext = (struct btf_ext *)btf_ext_ro;
tools/lib/bpf/btf.c
3410
const __u32 data_sz = btf_ext->data_size;
tools/lib/bpf/btf.c
3415
return btf_ext->data;
tools/lib/bpf/btf.c
3416
else if (btf_ext->data_swapped)
tools/lib/bpf/btf.c
3417
return btf_ext->data_swapped;
tools/lib/bpf/btf.c
3423
memcpy(data, btf_ext->data, data_sz);
tools/lib/bpf/btf.c
3425
btf_ext_bswap_info(btf_ext, data);
tools/lib/bpf/btf.c
3427
btf_ext->data_swapped = data;
tools/lib/bpf/btf.c
3431
const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size)
tools/lib/bpf/btf.c
3435
data = btf_ext_raw_data(btf_ext, btf_ext->swapped_endian);
tools/lib/bpf/btf.c
3439
*size = btf_ext->data_size;
tools/lib/bpf/btf.c
3444
const void *btf_ext__get_raw_data(const struct btf_ext *btf_ext, __u32 *size);
tools/lib/bpf/btf.c
3446
enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext)
tools/lib/bpf/btf.c
3449
return btf_ext->swapped_endian ? BTF_LITTLE_ENDIAN : BTF_BIG_ENDIAN;
tools/lib/bpf/btf.c
3451
return btf_ext->swapped_endian ? BTF_BIG_ENDIAN : BTF_LITTLE_ENDIAN;
tools/lib/bpf/btf.c
3454
int btf_ext__set_endianness(struct btf_ext *btf_ext, enum btf_endianness endian)
tools/lib/bpf/btf.c
3459
btf_ext->swapped_endian = is_host_big_endian() != (endian == BTF_BIG_ENDIAN);
tools/lib/bpf/btf.c
3461
if (!btf_ext->swapped_endian) {
tools/lib/bpf/btf.c
3462
free(btf_ext->data_swapped);
tools/lib/bpf/btf.c
3463
btf_ext->data_swapped = NULL;
tools/lib/bpf/btf.c
3694
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
3808
d->btf_ext = OPTS_GET(opts, btf_ext, NULL);
tools/lib/bpf/btf.c
3876
if (!d->btf_ext)
tools/lib/bpf/btf.c
3879
r = btf_ext_visit_str_offs(d->btf_ext, fn, ctx);
tools/lib/bpf/btf.c
5469
if (!d->btf_ext)
tools/lib/bpf/btf.c
5472
r = btf_ext_visit_type_ids(d->btf_ext, btf_dedup_remap_type_id, d);
tools/lib/bpf/btf.c
5551
int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx)
tools/lib/bpf/btf.c
5557
seg = &btf_ext->func_info;
tools/lib/bpf/btf.c
5568
seg = &btf_ext->core_relo_info;
tools/lib/bpf/btf.c
5582
int btf_ext_visit_str_offs(struct btf_ext *btf_ext, str_off_visit_fn visit, void *ctx)
tools/lib/bpf/btf.c
5588
seg = &btf_ext->func_info;
tools/lib/bpf/btf.c
5595
seg = &btf_ext->line_info;
tools/lib/bpf/btf.c
5613
seg = &btf_ext->core_relo_info;
tools/lib/bpf/btf.c
5983
struct btf_ext *btf_ext;
tools/lib/bpf/btf.c
6066
btf_ext = OPTS_GET(opts, btf_ext, NULL);
tools/lib/bpf/btf.c
6067
if (btf_ext) {
tools/lib/bpf/btf.c
6068
err = btf_ext_visit_type_ids(btf_ext, btf_permute_remap_type_id, &p);
tools/lib/bpf/btf.h
137
LIBBPF_API struct btf *btf__parse(const char *path, struct btf_ext **btf_ext);
tools/lib/bpf/btf.h
139
LIBBPF_API struct btf *btf__parse_elf(const char *path, struct btf_ext **btf_ext);
tools/lib/bpf/btf.h
172
LIBBPF_API struct btf_ext *btf_ext__new(const __u8 *data, __u32 size);
tools/lib/bpf/btf.h
173
LIBBPF_API void btf_ext__free(struct btf_ext *btf_ext);
tools/lib/bpf/btf.h
174
LIBBPF_API const void *btf_ext__raw_data(const struct btf_ext *btf_ext, __u32 *size);
tools/lib/bpf/btf.h
175
LIBBPF_API enum btf_endianness btf_ext__endianness(const struct btf_ext *btf_ext);
tools/lib/bpf/btf.h
176
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
258
struct btf_ext *btf_ext;
tools/lib/bpf/btf.h
287
struct btf_ext *btf_ext;
tools/lib/bpf/btf.h
290
#define btf_permute_opts__last_field btf_ext
tools/lib/bpf/libbpf.c
3293
obj->btf_ext = btf_ext__new(btf_ext_data->d_buf, btf_ext_data->d_size);
tools/lib/bpf/libbpf.c
3294
err = libbpf_get_error(obj->btf_ext);
tools/lib/bpf/libbpf.c
3298
obj->btf_ext = NULL;
tools/lib/bpf/libbpf.c
3303
ext_segs[0] = &obj->btf_ext->func_info;
tools/lib/bpf/libbpf.c
3304
ext_segs[1] = &obj->btf_ext->line_info;
tools/lib/bpf/libbpf.c
3305
ext_segs[2] = &obj->btf_ext->core_relo_info;
tools/lib/bpf/libbpf.c
3503
if (obj->btf_ext && obj->btf_ext->core_relo_info.len && !obj->btf_custom_path)
tools/lib/bpf/libbpf.c
6040
if (obj->btf_ext->core_relo_info.len == 0)
tools/lib/bpf/libbpf.c
6058
seg = &obj->btf_ext->core_relo_info;
tools/lib/bpf/libbpf.c
6547
if (!obj->btf_ext || !kernel_supports(obj, FEAT_BTF_FUNC))
tools/lib/bpf/libbpf.c
6556
err = adjust_prog_btf_ext_info(obj, prog, &obj->btf_ext->func_info,
tools/lib/bpf/libbpf.c
6584
err = adjust_prog_btf_ext_info(obj, prog, &obj->btf_ext->line_info,
tools/lib/bpf/libbpf.c
7246
if (!obj->btf_ext || !prog->func_info)
tools/lib/bpf/libbpf.c
729
struct btf_ext *btf_ext;
tools/lib/bpf/libbpf.c
7378
if (obj->btf_ext) {
tools/lib/bpf/libbpf.c
9454
btf_ext__free(obj->btf_ext);
tools/lib/bpf/libbpf_internal.h
585
int btf_ext_visit_type_ids(struct btf_ext *btf_ext, type_id_visit_fn visit, void *ctx);
tools/lib/bpf/libbpf_internal.h
586
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
4832
struct btf_ext *btf_ext = NULL;
tools/testing/selftests/bpf/prog_tests/btf.c
4847
btf = btf__parse_elf(test->file, &btf_ext);
tools/testing/selftests/bpf/prog_tests/btf.c
4859
has_btf_ext = btf_ext != NULL;
tools/testing/selftests/bpf/prog_tests/btf.c
4860
btf_ext__free(btf_ext);