diff options
| author | Alexei Starovoitov <[email protected]> | 2023-03-21 20:38:53 +0000 |
|---|---|---|
| committer | Andrii Nakryiko <[email protected]> | 2023-03-22 16:31:05 +0000 |
| commit | 708cdc5706a4701be9e5f81cb2e2b60b57f34c42 (patch) | |
| tree | d3f86c39ddf52a908a6e4c5f72a1eded79b2e910 /tools/lib/bpf/libbpf.c | |
| parent | bpf: Teach the verifier to recognize rdonly_mem as not null. (diff) | |
| download | kernel-708cdc5706a4701be9e5f81cb2e2b60b57f34c42.tar.gz kernel-708cdc5706a4701be9e5f81cb2e2b60b57f34c42.zip | |
libbpf: Support kfunc detection in light skeleton.
Teach gen_loader to find {btf_id, btf_obj_fd} of kernel variables and kfuncs
and populate corresponding ld_imm64 and bpf_call insns.
Signed-off-by: Alexei Starovoitov <[email protected]>
Signed-off-by: Andrii Nakryiko <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
| -rw-r--r-- | tools/lib/bpf/libbpf.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index f8131f963803..5d32aa8ea38a 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -7070,18 +7070,21 @@ static int bpf_program_record_relos(struct bpf_program *prog) for (i = 0; i < prog->nr_reloc; i++) { struct reloc_desc *relo = &prog->reloc_desc[i]; struct extern_desc *ext = &obj->externs[relo->sym_off]; + int kind; switch (relo->type) { case RELO_EXTERN_LD64: if (ext->type != EXT_KSYM) continue; + kind = btf_is_var(btf__type_by_id(obj->btf, ext->btf_id)) ? + BTF_KIND_VAR : BTF_KIND_FUNC; bpf_gen__record_extern(obj->gen_loader, ext->name, ext->is_weak, !ext->ksym.type_id, - BTF_KIND_VAR, relo->insn_idx); + true, kind, relo->insn_idx); break; case RELO_EXTERN_CALL: bpf_gen__record_extern(obj->gen_loader, ext->name, - ext->is_weak, false, BTF_KIND_FUNC, + ext->is_weak, false, false, BTF_KIND_FUNC, relo->insn_idx); break; case RELO_CORE: { |
