Star64_linux/tools/lib/bpf
Andrii Nakryiko 6084f5dc92 libbpf: Ensure btf_dump__new() and btf_dump_opts are future-proof
Change btf_dump__new() and corresponding struct btf_dump_ops structure
to be extensible by using OPTS "framework" ([0]). Given we don't change
the names, we use a similar approach as with bpf_prog_load(), but this
time we ended up with two APIs with the same name and same number of
arguments, so overloading based on number of arguments with
___libbpf_override() doesn't work.

Instead, use "overloading" based on types. In this particular case,
print callback has to be specified, so we detect which argument is
a callback. If it's 4th (last) argument, old implementation of API is
used by user code. If not, it must be 2nd, and thus new implementation
is selected. The rest is handled by the same symbol versioning approach.

btf_ext argument is dropped as it was never used and isn't necessary
either. If in the future we'll need btf_ext, that will be added into
OPTS-based struct btf_dump_opts.

struct btf_dump_opts is reused for both old API and new APIs. ctx field
is marked deprecated in v0.7+ and it's put at the same memory location
as OPTS's sz field. Any user of new-style btf_dump__new() will have to
set sz field and doesn't/shouldn't use ctx, as ctx is now passed along
the callback as mandatory input argument, following the other APIs in
libbpf that accept callbacks consistently.

Again, this is quite ugly in implementation, but is done in the name of
backwards compatibility and uniform and extensible future APIs (at the
same time, sigh). And it will be gone in libbpf 1.0.

  [0] Closes: https://github.com/libbpf/libbpf/issues/283

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20211111053624.190580-5-andrii@kernel.org
2021-11-11 16:54:05 -08:00
..
.gitignore
bpf.c libbpf: Remove internal use of deprecated bpf_prog_load() variants 2021-11-07 08:34:23 -08:00
bpf.h libbpf: Unify low-level BPF_PROG_LOAD APIs into bpf_prog_load() 2021-11-07 08:34:23 -08:00
bpf_core_read.h
bpf_endian.h
bpf_gen_internal.h libbpf: Unify low-level BPF_PROG_LOAD APIs into bpf_prog_load() 2021-11-07 08:34:23 -08:00
bpf_helpers.h
bpf_prog_linfo.c
bpf_tracing.h
btf.c libbpf: Turn btf_dedup_opts into OPTS-based struct 2021-11-11 16:54:05 -08:00
btf.h libbpf: Ensure btf_dump__new() and btf_dump_opts are future-proof 2021-11-11 16:54:05 -08:00
btf_dump.c libbpf: Ensure btf_dump__new() and btf_dump_opts are future-proof 2021-11-11 16:54:05 -08:00
Build
gen_loader.c libbpf: Unify low-level BPF_PROG_LOAD APIs into bpf_prog_load() 2021-11-07 08:34:23 -08:00
hashmap.c
hashmap.h
libbpf.c libbpf: Add ability to get/set per-program load flags 2021-11-11 16:44:26 -08:00
libbpf.h libbpf: Add ability to get/set per-program load flags 2021-11-11 16:44:26 -08:00
libbpf.map libbpf: Ensure btf_dump__new() and btf_dump_opts are future-proof 2021-11-11 16:54:05 -08:00
libbpf.pc.template
libbpf_common.h libbpf: Unify low-level BPF_PROG_LOAD APIs into bpf_prog_load() 2021-11-07 08:34:23 -08:00
libbpf_errno.c
libbpf_internal.h libbpf: Unify low-level BPF_PROG_LOAD APIs into bpf_prog_load() 2021-11-07 08:34:23 -08:00
libbpf_legacy.h libbpf: Rename DECLARE_LIBBPF_OPTS into LIBBPF_OPTS 2021-11-07 08:34:22 -08:00
libbpf_probes.c libbpf: Remove internal use of deprecated bpf_prog_load() variants 2021-11-07 08:34:23 -08:00
libbpf_version.h
linker.c libbpf: Turn btf_dedup_opts into OPTS-based struct 2021-11-11 16:54:05 -08:00
Makefile libbpf: Compile using -std=gnu89 2021-11-09 13:27:52 -08:00
netlink.c
nlattr.c
nlattr.h
relo_core.c
relo_core.h
ringbuf.c
skel_internal.h
str_error.c
str_error.h
strset.c
strset.h
xsk.c libbpf: Remove internal use of deprecated bpf_prog_load() variants 2021-11-07 08:34:23 -08:00
xsk.h