From: Alexei Starovoitov <ast@xxxxxxxxxx> v3->v4: . complete refactor of find candidates logic. Now it has small permanent cache. I haven't completed testing of all corner cases, but the patches are clean enough for review. . Fix a bug in gen_loader related to attach_kind. . Fix BTF log size limit. . More tests. v2->v3: . addressed Andrii's feedback in every patch. New field in union bpf_attr changed from "core_relo" to "core_relos". . added one more test and checkpatch.pl-ed the set. v1->v2: . Refactor uapi to pass 'struct bpf_core_relo' from LLVM into libbpf and further into the kernel instead of bpf_core_apply_relo() bpf helper. Because of this change the CO-RE algorithm has an ability to log error and debug events through the standard bpf verifer log mechanism which was not possible with helper approach. . #define RELO_CORE macro was removed and replaced with btf_member_bit_offset() patch. This set introduces CO-RE support in the kernel. There are several reasons to add such support: 1. It's a step toward signed BPF programs. 2. It allows golang like languages that struggle to adopt libbpf to take advantage of CO-RE powers. 3. Currently the field accessed by 'ldx [R1 + 10]' insn is recognized by the verifier purely based on +10 offset. If R1 points to a union the verifier picks one of the fields at this offset. With CO-RE the kernel can disambiguate the field access. Alexei Starovoitov (16): libbpf: Replace btf__type_by_id() with btf_type_by_id(). bpf: Rename btf_member accessors. bpf: Prepare relo_core.c for kernel duty. bpf: Define enum bpf_core_relo_kind as uapi. bpf: Pass a set of bpf_core_relo-s to prog_load command. bpf: Adjust BTF log size limit. bpf: Add bpf_core_add_cands() and wire it into bpf_core_apply_relo_insn(). libbpf: Use CO-RE in the kernel in light skeleton. libbpf: Support init of inner maps in light skeleton. libbpf: Clean gen_loader's attach kind. selftests/bpf: Add lskel version of kfunc test. selftests/bpf: Improve inner_map test coverage. selftests/bpf: Convert map_ptr_kern test to use light skeleton. selftests/bpf: Additional test for CO-RE in the kernel. selftests/bpf: Revert CO-RE removal in test_ksyms_weak. selftests/bpf: Add CO-RE relocations to verifier scale test. include/linux/bpf.h | 8 + include/linux/btf.h | 89 +++++- include/uapi/linux/bpf.h | 78 ++++- kernel/bpf/Makefile | 4 + kernel/bpf/bpf_struct_ops.c | 6 +- kernel/bpf/btf.c | 300 +++++++++++++++++- kernel/bpf/syscall.c | 2 +- kernel/bpf/verifier.c | 76 +++++ net/ipv4/bpf_tcp_ca.c | 6 +- tools/include/uapi/linux/bpf.h | 78 ++++- tools/lib/bpf/bpf_gen_internal.h | 4 + tools/lib/bpf/btf.c | 2 +- tools/lib/bpf/gen_loader.c | 72 ++++- tools/lib/bpf/libbpf.c | 116 +++++-- tools/lib/bpf/libbpf_internal.h | 2 +- tools/lib/bpf/relo_core.c | 179 +++++++---- tools/lib/bpf/relo_core.h | 73 +---- tools/testing/selftests/bpf/Makefile | 5 +- .../selftests/bpf/prog_tests/core_kern.c | 14 + .../selftests/bpf/prog_tests/kfunc_call.c | 24 ++ .../selftests/bpf/prog_tests/map_ptr.c | 16 +- tools/testing/selftests/bpf/progs/core_kern.c | 87 +++++ .../selftests/bpf/progs/map_ptr_kern.c | 16 +- .../selftests/bpf/progs/test_ksyms_weak.c | 2 +- .../selftests/bpf/progs/test_verif_scale2.c | 4 +- 25 files changed, 1050 insertions(+), 213 deletions(-) create mode 100644 tools/testing/selftests/bpf/prog_tests/core_kern.c create mode 100644 tools/testing/selftests/bpf/progs/core_kern.c -- 2.30.2