This patch set implements libbpf support for a second kind of special externs, kernel symbols, in addition to existing Kconfig externs. Right now, only untyped (const void) externs are supported, which, in C language, allow only to take their address. In the future, with kernel BTF getting type info about its own global and per-cpu variables, libbpf will extend this support with BTF type info, which will allow additionally to directly access variable's contents and follow internal pointers, similarly to how it's possible today in fentry/fexit programs. As a first practical use of this functionality, bpftool gained ability to show PIDs of processes that have open file descriptors for BPF map/program/link/BTF object. It relies on iter/task_file BPF iterator program to extract this information efficiently. There was a bunch of bpftool refactoring (especially Makefile) necessary to generalize bpftool's internal BPF program use. This includes generalization of BPF skeletons support, addition of a vmlinux.h generation, extracting and building minimal subset of bpftool for bootstrapping. This RFC seeks feedback on ksym externs support in libbpf. The way it is designed and supported should be naturally extended with backwards compatibility in mind for when kernel will get support for kernel global variables access through BPF. Please also provide your feedback bpftool support for showing PIDs and and how it could be done better. I'll update existing bpftool man pages and bash-completion with examples of output and new flag in v1, after gather initial feedback. Cc: Hao Luo <haoluo@xxxxxxxxxx> Cc: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> Cc: Song Liu <songliubraving@xxxxxx> Cc: Quentin Monnet <quentin@xxxxxxxxxxxxx> Andrii Nakryiko (8): libbpf: generalize libbpf externs support libbpf: add support for extracting kernel symbol addresses selftests/bpf: add __ksym extern selftest tools/bpftool: move map/prog parsing logic into common tools/bpftool: minimize bootstrap bpftool tools/bpftool: generalize BPF skeleton support and generate vmlinux.h libbpf: wrap source argument of BPF_CORE_READ macro in parentheses tools/bpftool: show PIDs with FDs open against BPF map/prog/link/btf tools/bpf/bpftool/.gitignore | 5 +- tools/bpf/bpftool/Makefile | 60 ++- tools/bpf/bpftool/btf.c | 39 ++ tools/bpf/bpftool/common.c | 308 ++++++++++++ tools/bpf/bpftool/link.c | 40 ++ tools/bpf/bpftool/main.c | 19 +- tools/bpf/bpftool/main.h | 47 +- tools/bpf/bpftool/map.c | 195 ++------ tools/bpf/bpftool/pids.c | 150 ++++++ tools/bpf/bpftool/prog.c | 192 ++------ tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 77 +++ tools/bpf/bpftool/skeleton/profiler.bpf.c | 3 +- tools/bpf/bpftool/skeleton/profiler.h | 46 -- tools/build/feature/Makefile | 4 +- tools/build/feature/test-clang-bpf-co-re.c | 9 + .../build/feature/test-clang-bpf-global-var.c | 4 - tools/lib/bpf/bpf_core_read.h | 8 +- tools/lib/bpf/bpf_helpers.h | 1 + tools/lib/bpf/btf.h | 5 + tools/lib/bpf/libbpf.c | 464 +++++++++++++----- .../testing/selftests/bpf/prog_tests/ksyms.c | 71 +++ .../testing/selftests/bpf/progs/test_ksyms.c | 32 ++ 22 files changed, 1240 insertions(+), 539 deletions(-) create mode 100644 tools/bpf/bpftool/pids.c create mode 100644 tools/bpf/bpftool/skeleton/pid_iter.bpf.c delete mode 100644 tools/bpf/bpftool/skeleton/profiler.h create mode 100644 tools/build/feature/test-clang-bpf-co-re.c delete mode 100644 tools/build/feature/test-clang-bpf-global-var.c create mode 100644 tools/testing/selftests/bpf/prog_tests/ksyms.c create mode 100644 tools/testing/selftests/bpf/progs/test_ksyms.c -- 2.24.1