mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 15:41:36 +00:00
19e00c897d
Map distilled base BTF type ids referenced in split BTF and their references to the base BTF passed in, and if the mapping succeeds, reparent the split BTF to the base BTF. Relocation is done by first verifying that distilled base BTF only consists of named INT, FLOAT, ENUM, FWD, STRUCT and UNION kinds; then we sort these to speed lookups. Once sorted, the base BTF is iterated, and for each relevant kind we check for an equivalent in distilled base BTF. When found, the mapping from distilled -> base BTF id and string offset is recorded. In establishing mappings, we need to ensure we check STRUCT/UNION size when the STRUCT/UNION is embedded in a split BTF STRUCT/UNION, and when duplicate names exist for the same STRUCT/UNION. Otherwise size is ignored in matching STRUCT/UNIONs. Once all mappings are established, we can update type ids and string offsets in split BTF and reparent it to the new base. Signed-off-by: Alan Maguire <alan.maguire@oracle.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/bpf/20240613095014.357981-4-alan.maguire@oracle.com
430 lines
8.8 KiB
Plaintext
430 lines
8.8 KiB
Plaintext
LIBBPF_0.0.1 {
|
|
global:
|
|
bpf_btf_get_fd_by_id;
|
|
bpf_map__btf_key_type_id;
|
|
bpf_map__btf_value_type_id;
|
|
bpf_map__fd;
|
|
bpf_map__name;
|
|
bpf_map__pin;
|
|
bpf_map__reuse_fd;
|
|
bpf_map__set_ifindex;
|
|
bpf_map__set_inner_map_fd;
|
|
bpf_map__unpin;
|
|
bpf_map_delete_elem;
|
|
bpf_map_get_fd_by_id;
|
|
bpf_map_get_next_id;
|
|
bpf_map_get_next_key;
|
|
bpf_map_lookup_and_delete_elem;
|
|
bpf_map_lookup_elem;
|
|
bpf_map_update_elem;
|
|
bpf_obj_get;
|
|
bpf_obj_get_info_by_fd;
|
|
bpf_obj_pin;
|
|
bpf_object__btf_fd;
|
|
bpf_object__close;
|
|
bpf_object__find_map_by_name;
|
|
bpf_object__kversion;
|
|
bpf_object__load;
|
|
bpf_object__name;
|
|
bpf_object__open;
|
|
bpf_object__pin;
|
|
bpf_object__pin_maps;
|
|
bpf_object__pin_programs;
|
|
bpf_object__unpin_maps;
|
|
bpf_object__unpin_programs;
|
|
bpf_prog_attach;
|
|
bpf_prog_detach;
|
|
bpf_prog_detach2;
|
|
bpf_prog_get_fd_by_id;
|
|
bpf_prog_get_next_id;
|
|
bpf_prog_query;
|
|
bpf_program__fd;
|
|
bpf_program__pin;
|
|
bpf_program__set_expected_attach_type;
|
|
bpf_program__set_ifindex;
|
|
bpf_program__set_type;
|
|
bpf_program__unload;
|
|
bpf_program__unpin;
|
|
bpf_prog_linfo__free;
|
|
bpf_prog_linfo__new;
|
|
bpf_prog_linfo__lfind_addr_func;
|
|
bpf_prog_linfo__lfind;
|
|
bpf_raw_tracepoint_open;
|
|
bpf_task_fd_query;
|
|
btf__fd;
|
|
btf__find_by_name;
|
|
btf__free;
|
|
btf__name_by_offset;
|
|
btf__new;
|
|
btf__resolve_size;
|
|
btf__resolve_type;
|
|
btf__type_by_id;
|
|
libbpf_attach_type_by_name;
|
|
libbpf_get_error;
|
|
libbpf_prog_type_by_name;
|
|
libbpf_set_print;
|
|
libbpf_strerror;
|
|
local:
|
|
*;
|
|
};
|
|
|
|
LIBBPF_0.0.2 {
|
|
global:
|
|
bpf_map_lookup_elem_flags;
|
|
bpf_object__btf;
|
|
bpf_object__find_map_fd_by_name;
|
|
btf__get_raw_data;
|
|
btf_ext__free;
|
|
btf_ext__get_raw_data;
|
|
btf_ext__new;
|
|
} LIBBPF_0.0.1;
|
|
|
|
LIBBPF_0.0.3 {
|
|
global:
|
|
bpf_map__is_internal;
|
|
bpf_map_freeze;
|
|
} LIBBPF_0.0.2;
|
|
|
|
LIBBPF_0.0.4 {
|
|
global:
|
|
bpf_link__destroy;
|
|
bpf_program__attach_kprobe;
|
|
bpf_program__attach_perf_event;
|
|
bpf_program__attach_raw_tracepoint;
|
|
bpf_program__attach_tracepoint;
|
|
bpf_program__attach_uprobe;
|
|
btf_dump__dump_type;
|
|
btf_dump__free;
|
|
btf__parse_elf;
|
|
libbpf_num_possible_cpus;
|
|
perf_buffer__free;
|
|
perf_buffer__poll;
|
|
} LIBBPF_0.0.3;
|
|
|
|
LIBBPF_0.0.5 {
|
|
global:
|
|
bpf_btf_get_next_id;
|
|
} LIBBPF_0.0.4;
|
|
|
|
LIBBPF_0.0.6 {
|
|
global:
|
|
bpf_map__get_pin_path;
|
|
bpf_map__is_pinned;
|
|
bpf_map__set_pin_path;
|
|
bpf_object__open_file;
|
|
bpf_object__open_mem;
|
|
bpf_program__attach_trace;
|
|
bpf_program__get_expected_attach_type;
|
|
bpf_program__get_type;
|
|
btf__find_by_name_kind;
|
|
libbpf_find_vmlinux_btf_id;
|
|
} LIBBPF_0.0.5;
|
|
|
|
LIBBPF_0.0.7 {
|
|
global:
|
|
btf_dump__emit_type_decl;
|
|
bpf_link__disconnect;
|
|
bpf_map__attach_struct_ops;
|
|
bpf_map_delete_batch;
|
|
bpf_map_lookup_and_delete_batch;
|
|
bpf_map_lookup_batch;
|
|
bpf_map_update_batch;
|
|
bpf_object__find_program_by_name;
|
|
bpf_object__attach_skeleton;
|
|
bpf_object__destroy_skeleton;
|
|
bpf_object__detach_skeleton;
|
|
bpf_object__load_skeleton;
|
|
bpf_object__open_skeleton;
|
|
bpf_program__attach;
|
|
bpf_program__name;
|
|
btf__align_of;
|
|
libbpf_find_kernel_btf;
|
|
} LIBBPF_0.0.6;
|
|
|
|
LIBBPF_0.0.8 {
|
|
global:
|
|
bpf_link__fd;
|
|
bpf_link__open;
|
|
bpf_link__pin;
|
|
bpf_link__pin_path;
|
|
bpf_link__unpin;
|
|
bpf_link__update_program;
|
|
bpf_link_create;
|
|
bpf_link_update;
|
|
bpf_map__set_initial_value;
|
|
bpf_prog_attach_opts;
|
|
bpf_program__attach_cgroup;
|
|
bpf_program__attach_lsm;
|
|
bpf_program__set_attach_target;
|
|
} LIBBPF_0.0.7;
|
|
|
|
LIBBPF_0.0.9 {
|
|
global:
|
|
bpf_enable_stats;
|
|
bpf_iter_create;
|
|
bpf_link_get_fd_by_id;
|
|
bpf_link_get_next_id;
|
|
bpf_program__attach_iter;
|
|
bpf_program__attach_netns;
|
|
perf_buffer__consume;
|
|
ring_buffer__add;
|
|
ring_buffer__consume;
|
|
ring_buffer__free;
|
|
ring_buffer__new;
|
|
ring_buffer__poll;
|
|
} LIBBPF_0.0.8;
|
|
|
|
LIBBPF_0.1.0 {
|
|
global:
|
|
bpf_link__detach;
|
|
bpf_link_detach;
|
|
bpf_map__ifindex;
|
|
bpf_map__key_size;
|
|
bpf_map__map_flags;
|
|
bpf_map__max_entries;
|
|
bpf_map__numa_node;
|
|
bpf_map__set_key_size;
|
|
bpf_map__set_map_flags;
|
|
bpf_map__set_max_entries;
|
|
bpf_map__set_numa_node;
|
|
bpf_map__set_type;
|
|
bpf_map__set_value_size;
|
|
bpf_map__type;
|
|
bpf_map__value_size;
|
|
bpf_program__attach_xdp;
|
|
bpf_program__autoload;
|
|
bpf_program__set_autoload;
|
|
btf__parse;
|
|
btf__parse_raw;
|
|
btf__pointer_size;
|
|
btf__set_fd;
|
|
btf__set_pointer_size;
|
|
} LIBBPF_0.0.9;
|
|
|
|
LIBBPF_0.2.0 {
|
|
global:
|
|
bpf_prog_bind_map;
|
|
bpf_prog_test_run_opts;
|
|
bpf_program__attach_freplace;
|
|
bpf_program__section_name;
|
|
btf__add_array;
|
|
btf__add_const;
|
|
btf__add_enum;
|
|
btf__add_enum_value;
|
|
btf__add_datasec;
|
|
btf__add_datasec_var_info;
|
|
btf__add_field;
|
|
btf__add_func;
|
|
btf__add_func_param;
|
|
btf__add_func_proto;
|
|
btf__add_fwd;
|
|
btf__add_int;
|
|
btf__add_ptr;
|
|
btf__add_restrict;
|
|
btf__add_str;
|
|
btf__add_struct;
|
|
btf__add_typedef;
|
|
btf__add_union;
|
|
btf__add_var;
|
|
btf__add_volatile;
|
|
btf__endianness;
|
|
btf__find_str;
|
|
btf__new_empty;
|
|
btf__set_endianness;
|
|
btf__str_by_offset;
|
|
perf_buffer__buffer_cnt;
|
|
perf_buffer__buffer_fd;
|
|
perf_buffer__epoll_fd;
|
|
perf_buffer__consume_buffer;
|
|
} LIBBPF_0.1.0;
|
|
|
|
LIBBPF_0.3.0 {
|
|
global:
|
|
btf__base_btf;
|
|
btf__parse_elf_split;
|
|
btf__parse_raw_split;
|
|
btf__parse_split;
|
|
btf__new_empty_split;
|
|
ring_buffer__epoll_fd;
|
|
} LIBBPF_0.2.0;
|
|
|
|
LIBBPF_0.4.0 {
|
|
global:
|
|
btf__add_float;
|
|
btf__add_type;
|
|
bpf_linker__add_file;
|
|
bpf_linker__finalize;
|
|
bpf_linker__free;
|
|
bpf_linker__new;
|
|
bpf_map__inner_map;
|
|
bpf_object__set_kversion;
|
|
bpf_tc_attach;
|
|
bpf_tc_detach;
|
|
bpf_tc_hook_create;
|
|
bpf_tc_hook_destroy;
|
|
bpf_tc_query;
|
|
} LIBBPF_0.3.0;
|
|
|
|
LIBBPF_0.5.0 {
|
|
global:
|
|
bpf_map__initial_value;
|
|
bpf_map__pin_path;
|
|
bpf_map_lookup_and_delete_elem_flags;
|
|
bpf_program__attach_kprobe_opts;
|
|
bpf_program__attach_perf_event_opts;
|
|
bpf_program__attach_tracepoint_opts;
|
|
bpf_program__attach_uprobe_opts;
|
|
bpf_object__gen_loader;
|
|
btf__load_from_kernel_by_id;
|
|
btf__load_from_kernel_by_id_split;
|
|
btf__load_into_kernel;
|
|
btf__load_module_btf;
|
|
btf__load_vmlinux_btf;
|
|
btf_dump__dump_type_data;
|
|
libbpf_set_strict_mode;
|
|
} LIBBPF_0.4.0;
|
|
|
|
LIBBPF_0.6.0 {
|
|
global:
|
|
bpf_map__map_extra;
|
|
bpf_map__set_map_extra;
|
|
bpf_map_create;
|
|
bpf_object__next_map;
|
|
bpf_object__next_program;
|
|
bpf_object__prev_map;
|
|
bpf_object__prev_program;
|
|
bpf_prog_load;
|
|
bpf_program__flags;
|
|
bpf_program__insn_cnt;
|
|
bpf_program__insns;
|
|
bpf_program__set_flags;
|
|
btf__add_btf;
|
|
btf__add_decl_tag;
|
|
btf__add_type_tag;
|
|
btf__dedup;
|
|
btf__raw_data;
|
|
btf__type_cnt;
|
|
btf_dump__new;
|
|
libbpf_major_version;
|
|
libbpf_minor_version;
|
|
libbpf_version_string;
|
|
perf_buffer__new;
|
|
perf_buffer__new_raw;
|
|
} LIBBPF_0.5.0;
|
|
|
|
LIBBPF_0.7.0 {
|
|
global:
|
|
bpf_btf_load;
|
|
bpf_program__expected_attach_type;
|
|
bpf_program__log_buf;
|
|
bpf_program__log_level;
|
|
bpf_program__set_log_buf;
|
|
bpf_program__set_log_level;
|
|
bpf_program__type;
|
|
bpf_xdp_attach;
|
|
bpf_xdp_detach;
|
|
bpf_xdp_query;
|
|
bpf_xdp_query_id;
|
|
libbpf_probe_bpf_helper;
|
|
libbpf_probe_bpf_map_type;
|
|
libbpf_probe_bpf_prog_type;
|
|
libbpf_set_memlock_rlim;
|
|
} LIBBPF_0.6.0;
|
|
|
|
LIBBPF_0.8.0 {
|
|
global:
|
|
bpf_map__autocreate;
|
|
bpf_map__get_next_key;
|
|
bpf_map__delete_elem;
|
|
bpf_map__lookup_and_delete_elem;
|
|
bpf_map__lookup_elem;
|
|
bpf_map__set_autocreate;
|
|
bpf_map__update_elem;
|
|
bpf_map_delete_elem_flags;
|
|
bpf_object__destroy_subskeleton;
|
|
bpf_object__open_subskeleton;
|
|
bpf_program__attach_kprobe_multi_opts;
|
|
bpf_program__attach_trace_opts;
|
|
bpf_program__attach_usdt;
|
|
bpf_program__set_insns;
|
|
libbpf_register_prog_handler;
|
|
libbpf_unregister_prog_handler;
|
|
} LIBBPF_0.7.0;
|
|
|
|
LIBBPF_1.0.0 {
|
|
global:
|
|
bpf_obj_get_opts;
|
|
bpf_prog_query_opts;
|
|
bpf_program__attach_ksyscall;
|
|
bpf_program__autoattach;
|
|
bpf_program__set_autoattach;
|
|
btf__add_enum64;
|
|
btf__add_enum64_value;
|
|
libbpf_bpf_attach_type_str;
|
|
libbpf_bpf_link_type_str;
|
|
libbpf_bpf_map_type_str;
|
|
libbpf_bpf_prog_type_str;
|
|
perf_buffer__buffer;
|
|
} LIBBPF_0.8.0;
|
|
|
|
LIBBPF_1.1.0 {
|
|
global:
|
|
bpf_btf_get_fd_by_id_opts;
|
|
bpf_link_get_fd_by_id_opts;
|
|
bpf_map_get_fd_by_id_opts;
|
|
bpf_prog_get_fd_by_id_opts;
|
|
user_ring_buffer__discard;
|
|
user_ring_buffer__free;
|
|
user_ring_buffer__new;
|
|
user_ring_buffer__reserve;
|
|
user_ring_buffer__reserve_blocking;
|
|
user_ring_buffer__submit;
|
|
} LIBBPF_1.0.0;
|
|
|
|
LIBBPF_1.2.0 {
|
|
global:
|
|
bpf_btf_get_info_by_fd;
|
|
bpf_link__update_map;
|
|
bpf_link_get_info_by_fd;
|
|
bpf_map_get_info_by_fd;
|
|
bpf_prog_get_info_by_fd;
|
|
} LIBBPF_1.1.0;
|
|
|
|
LIBBPF_1.3.0 {
|
|
global:
|
|
bpf_obj_pin_opts;
|
|
bpf_object__unpin;
|
|
bpf_prog_detach_opts;
|
|
bpf_program__attach_netfilter;
|
|
bpf_program__attach_netkit;
|
|
bpf_program__attach_tcx;
|
|
bpf_program__attach_uprobe_multi;
|
|
ring__avail_data_size;
|
|
ring__consume;
|
|
ring__consumer_pos;
|
|
ring__map_fd;
|
|
ring__producer_pos;
|
|
ring__size;
|
|
ring_buffer__ring;
|
|
} LIBBPF_1.2.0;
|
|
|
|
LIBBPF_1.4.0 {
|
|
global:
|
|
bpf_program__attach_raw_tracepoint_opts;
|
|
bpf_raw_tracepoint_open_opts;
|
|
bpf_token_create;
|
|
btf__new_split;
|
|
btf_ext__raw_data;
|
|
} LIBBPF_1.3.0;
|
|
|
|
LIBBPF_1.5.0 {
|
|
global:
|
|
btf__distill_base;
|
|
btf__relocate;
|
|
bpf_map__autoattach;
|
|
bpf_map__set_autoattach;
|
|
bpf_program__attach_sockmap;
|
|
ring__consume_n;
|
|
ring_buffer__consume_n;
|
|
} LIBBPF_1.4.0;
|