• Daniel Borkmann's avatar
    bpf, libbpf: Guard bpf inline asm from bpf_tail_call_static · 3652c9a1
    Daniel Borkmann authored
    Yaniv reported a compilation error after pulling latest libbpf:
    
      [...]
      ../libbpf/src/root/usr/include/bpf/bpf_helpers.h:99:10: error:
      unknown register name 'r0' in asm
                         : "r0", "r1", "r2", "r3", "r4", "r5");
      [...]
    
    The issue got triggered given Yaniv was compiling tracing programs with native
    target (e.g. x86) instead of BPF target, hence no BTF generated vmlinux.h nor
    CO-RE used, and later llc with -march=bpf was invoked to compile from LLVM IR
    to BPF object file. Given that clang was expecting x86 inline asm and not BPF
    one the error complained that these regs don't exist on the former.
    
    Guard bpf_tail_call_static() with defined(__bpf__) where BPF inline asm is valid
    to use. BPF tracing programs on more modern kernels use BPF target anyway and
    thus the bpf_tail_call_static() function will be available for them. BPF inline
    asm is supported since clang 7 (clang <= 6 otherwise throws same above error),
    and __bpf_unreachable() since clang 8, therefore include the latter condition
    in order to prevent compilation errors for older clang versions. Given even an
    old Ubuntu 18.04 LTS has official LLVM packages all the way up to llvm-10, I did
    not bother to special case the __bpf_unreachable() inside bpf_tail_call_static()
    further.
    
    Also, undo the sockex3_kern's use of bpf_tail_call_static() sample given they
    still have the old hacky way to even compile networking progs with native instead
    of BPF target so bpf_tail_call_static() won't be defined there anymore.
    
    Fixes: 0e9f6841 ("bpf, libbpf: Add bpf_tail_call_static helper for bpf programs")
    Reported-by: default avatarYaniv Agman <yanivagman@gmail.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Tested-by: default avatarYaniv Agman <yanivagman@gmail.com>
    Link: https://lore.kernel.org/bpf/CAMy7=ZUk08w5Gc2Z-EKi4JFtuUCaZYmE4yzhJjrExXpYKR4L8w@mail.gmail.com
    Link: https://lore.kernel.org/bpf/20201021203257.26223-1-daniel@iogearbox.net
    3652c9a1
bpf_helpers.h 3.74 KB