From: Alexei Starovoitov <ast@xxxxxxxxxx> 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 (12): libbpf: s/btf__type_by_id/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: 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. selftests/bpf: Convert kfunc test with CO-RE to lskel. 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. include/linux/bpf.h | 3 + include/linux/btf.h | 90 ++++++++- include/uapi/linux/bpf.h | 78 +++++++- kernel/bpf/Makefile | 4 + kernel/bpf/bpf_struct_ops.c | 6 +- kernel/bpf/btf.c | 187 +++++++++++++++++- kernel/bpf/syscall.c | 2 +- kernel/bpf/verifier.c | 71 +++++++ 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 | 68 ++++++- tools/lib/bpf/libbpf.c | 112 ++++++++--- tools/lib/bpf/libbpf_internal.h | 2 +- tools/lib/bpf/relo_core.c | 171 ++++++++++------ tools/lib/bpf/relo_core.h | 71 ------- tools/testing/selftests/bpf/Makefile | 3 +- .../selftests/bpf/prog_tests/core_kern.c | 21 ++ .../selftests/bpf/prog_tests/kfunc_call.c | 10 +- .../selftests/bpf/prog_tests/map_ptr.c | 16 +- tools/testing/selftests/bpf/progs/core_kern.c | 60 ++++++ .../selftests/bpf/progs/map_ptr_kern.c | 16 +- 23 files changed, 877 insertions(+), 204 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