• Andrii Nakryiko's avatar
    libbpf: generalize virtual __kconfig externs and use it for USDT · 55d00c37
    Andrii Nakryiko authored
    Libbpf supports single virtual __kconfig extern currently: LINUX_KERNEL_VERSION.
    LINUX_KERNEL_VERSION isn't coming from /proc/kconfig.gz and is intead
    customly filled out by libbpf.
    
    This patch generalizes this approach to support more such virtual
    __kconfig externs. One such extern added in this patch is
    LINUX_HAS_BPF_COOKIE which is used for BPF-side USDT supporting code in
    usdt.bpf.h instead of using CO-RE-based enum detection approach for
    detecting bpf_get_attach_cookie() BPF helper. This allows to remove
    otherwise not needed CO-RE dependency and keeps user-space and BPF-side
    parts of libbpf's USDT support strictly in sync in terms of their
    feature detection.
    
    We'll use similar approach for syscall wrapper detection for
    BPF_KSYSCALL() BPF-side macro in follow up patch.
    
    Generally, currently libbpf reserves CONFIG_ prefix for Kconfig values
    and LINUX_ for virtual libbpf-backed externs. In the future we might
    extend the set of prefixes that are supported. This can be done without
    any breaking changes, as currently any __kconfig extern with
    unrecognized name is rejected.
    
    For LINUX_xxx externs we support the normal "weak rule": if libbpf
    doesn't recognize given LINUX_xxx extern but such extern is marked as
    __weak, it is not rejected and defaults to zero.  This follows
    CONFIG_xxx handling logic and will allow BPF applications to
    opportunistically use newer libbpf virtual externs without breaking on
    older libbpf versions unnecessarily.
    Tested-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Reviewed-by: default avatarAlan Maguire <alan.maguire@oracle.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220714070755.3235561-2-andrii@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    55d00c37
usdt.bpf.h 8.4 KB