linux/tools/lib/bpf
Alan Maguire 19e00c897d libbpf: Split BTF relocation
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
2024-06-17 14:38:31 -07:00
..
.gitignore libbpf: Make libbpf_version.h non-auto-generated 2021-09-13 15:36:47 -07:00
bpf_core_read.h bpf: Avoid uninitialized value in BPF_CORE_READ_BITFIELD 2024-05-08 15:00:55 -07:00
bpf_endian.h libbpf: Make bpf_endian co-exist with vmlinux.h 2020-07-01 09:06:12 +02:00
bpf_gen_internal.h libbpf: Support kfunc detection in light skeleton. 2023-03-22 09:31:05 -07:00
bpf_helpers.h libbpf: Fix bpf_ksym_exists() in GCC 2024-05-02 22:47:22 -07:00
bpf_prog_linfo.c libbpf: Streamline error reporting for high-level APIs 2021-05-25 17:32:35 -07:00
bpf_tracing.h libbpf: Avoid casts from pointers to enums in bpf_tracing.h 2024-05-02 22:58:58 -07:00
bpf.c libbpf: fix feature detectors when using token_fd 2024-05-15 09:34:53 -07:00
bpf.h libbpf: add support for BPF cookie for raw_tp/tp_btf programs 2024-03-19 23:05:34 -07:00
btf_dump.c libbpf: Fix dump of subsequent char arrays 2024-04-17 15:24:02 +02:00
btf_relocate.c libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
btf.c libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
btf.h libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
Build libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
elf.c libbpf: Move feature detection code into its own file 2024-01-24 16:21:02 -08:00
features.c libbpf: don't close(-1) in multi-uprobe feature detector 2024-05-31 14:56:51 -07:00
gen_loader.c libbpf: Store zero fd to fd_array for loader kfunc relocation 2023-05-16 22:09:23 -07:00
hashmap.c libbpf: Hashmap interface update to allow both long and void* keys/values 2022-11-09 20:45:14 -08:00
hashmap.h libbpf: Remove HASHMAP_INIT static initialization helper 2023-07-11 09:40:05 -07:00
libbpf_common.h libbpf: Fix potential uninitialized tail padding with LIBBPF_OPTS_RESET 2023-11-09 19:07:51 -08:00
libbpf_errno.c libbpf: Optimized return value in libbpf_strerror when errno is libbpf errno 2022-12-14 18:39:33 +01:00
libbpf_internal.h libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
libbpf_legacy.h libbpf: Clean up deprecated and legacy aliases 2022-08-17 22:42:56 +02:00
libbpf_probes.c bpf: improve error message for unsupported helper 2024-03-28 18:30:53 -07:00
libbpf_version.h libbpf: Start v1.5 development cycle 2024-04-06 09:11:10 -07:00
libbpf.c libbpf: Auto-attach struct_ops BPF maps in BPF skeleton 2024-06-06 10:06:05 -07:00
libbpf.h libbpf: Auto-attach struct_ops BPF maps in BPF skeleton 2024-06-06 10:06:05 -07:00
libbpf.map libbpf: Split BTF relocation 2024-06-17 14:38:31 -07:00
libbpf.pc.template libbpf: Add zlib as a dependency in pkg-config template 2019-12-16 14:55:29 -08:00
linker.c libbpf: Make use of BTF field iterator in BPF linker code 2024-06-05 16:54:32 +02:00
Makefile kbuild: unexport abs_srctree and abs_objtree 2024-03-10 17:27:17 +09:00
netlink.c libbpf: Use OPTS_SET() macro in bpf_xdp_query() 2024-02-06 09:51:26 -08:00
nlattr.c libbpf: Fix alen calculation in libbpf_nla_dump_errormsg() 2023-02-10 15:27:22 -08:00
nlattr.h libbpf: add API to get XDP/XSK supported features 2023-02-02 20:48:24 -08:00
relo_core.c libbpf: fix signedness determination in CO-RE relo handling logic 2023-08-23 21:13:48 -07:00
relo_core.h bpf, libbpf: Add type match support 2022-07-05 21:14:25 -07:00
ringbuf.c libbpf: fix ring_buffer__consume_n() return result logic 2024-05-02 16:41:03 -07:00
skel_internal.h libbpf: add map_get_fd_by_id and map_delete_elem in light skeleton 2022-08-25 18:52:29 -07:00
str_error.c libbpf: fix libbpf_strerror_r() handling unknown errors 2024-05-07 16:21:59 -07:00
str_error.h libbpf: Move feature detection code into its own file 2024-01-24 16:21:02 -08:00
strset.c libbpf: Hashmap interface update to allow both long and void* keys/values 2022-11-09 20:45:14 -08:00
strset.h libbpf: Extract internal set-of-strings datastructure APIs 2021-03-18 16:14:22 -07:00
usdt.bpf.h libbpf: Avoid casts from pointers to enums in bpf_tracing.h 2024-05-02 22:58:58 -07:00
usdt.c libbpf: Add uprobe multi link support to bpf_program__attach_usdt 2023-08-21 15:51:26 -07:00
zip.c libbpf: Ignore warnings about "inefficient alignment" 2023-03-16 18:20:08 +01:00
zip.h libbpf: Implement basic zip archive parsing support 2023-03-01 16:05:34 -08:00