libbpf: Rewrite btf datasec names starting from '?'
authorEduard Zingerman <eddyz87@gmail.com>
Wed, 6 Mar 2024 10:45:26 +0000 (12:45 +0200)
committerAndrii Nakryiko <andrii@kernel.org>
Wed, 6 Mar 2024 23:18:16 +0000 (15:18 -0800)
commit6ebaa3fb88bbe4c33a0e01ce27007e1dd4fd133c
treea57dae4f7884140f99d6b78f9a461b2b16f9f30d
parent5ad0ecbe056a4ea5ffaa73e58503a2f87b119a59
libbpf: Rewrite btf datasec names starting from '?'

Optional struct_ops maps are defined using question mark at the start
of the section name, e.g.:

    SEC("?.struct_ops")
    struct test_ops optional_map = { ... };

This commit teaches libbpf to detect if kernel allows '?' prefix
in datasec names, and if it doesn't then to rewrite such names
by replacing '?' with '_', e.g.:

    DATASEC ?.struct_ops -> DATASEC _.struct_ops

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240306104529.6453-13-eddyz87@gmail.com
tools/lib/bpf/features.c
tools/lib/bpf/libbpf.c
tools/lib/bpf/libbpf_internal.h