• Dave Marchevsky's avatar
    libbpf: Modify bpf_printk to choose helper based on arg count · c2758baa
    Dave Marchevsky authored
    
    
    Instead of being a thin wrapper which calls into bpf_trace_printk,
    libbpf's bpf_printk convenience macro now chooses between
    bpf_trace_printk and bpf_trace_vprintk. If the arg count (excluding
    format string) is >3, use bpf_trace_vprintk, otherwise use the older
    helper.
    
    The motivation behind this added complexity - instead of migrating
    entirely to bpf_trace_vprintk - is to maintain good developer experience
    for users compiling against new libbpf but running on older kernels.
    Users who are passing <=3 args to bpf_printk will see no change in their
    bytecode.
    
    __bpf_vprintk functions similarly to BPF_SEQ_PRINTF and BPF_SNPRINTF
    macros elsewhere in the file - it allows use of bpf_trace_vprintk
    without manual conversion of varargs to u64 array. Previous
    implementation of bpf_printk macro is moved to __bpf_printk for use by
    the new implementation.
    
    This does change behavior of bpf_printk calls with >3 args in the "new
    libbpf, old kernels" scenario. Before this patch, attempting to use 4
    args to bpf_printk results in a compile-time error. After this patch,
    using bpf_printk with 4 args results in a trace_vprintk helper call
    being emitted and a load-time failure on older kernels.
    Signed-off-by: default avatarDave Marchevsky <davemarchevsky@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20210917182911.2426606-5-davemarchevsky@fb.com
    c2758baa
bpf_helpers.h 8.48 KB