• Eduard Zingerman's avatar
    selftests/bpf: fix to avoid __msg tag de-duplication by clang · f00bb757
    Eduard Zingerman authored
    __msg, __regex and __xlated tags are based on
    __attribute__((btf_decl_tag("..."))) annotations.
    
    Clang de-duplicates such annotations, e.g. the following
    two sequences of tags are identical in final BTF:
    
        /* seq A */            /* seq B */
        __tag("foo")           __tag("foo")
        __tag("bar")           __tag("bar")
        __tag("foo")
    
    Fix this by adding a unique suffix for each tag using __COUNTER__
    pre-processor macro. E.g. here is a new definition for __msg:
    
        #define __msg(msg) \
          __attribute__((btf_decl_tag("comment:test_expect_msg=" XSTR(__COUNTER__) "=" msg)))
    
    Using this definition the "seq A" from example above is translated to
    BTF as follows:
    
        [..] DECL_TAG 'comment:test_expect_msg=0=foo' type_id=X component_idx=-1
        [..] DECL_TAG 'comment:test_expect_msg=1=bar' type_id=X component_idx=-1
        [..] DECL_TAG 'comment:test_expect_msg=2=foo' type_id=X component_idx=-1
    
    Surprisingly, this bug affects a single existing test:
    verifier_spill_fill/old_stack_misc_vs_cur_ctx_ptr,
    where sequence of identical messages was expected in the log.
    
    Fixes: 537c3f66 ("selftests/bpf: add generic BPF program tester-loader")
    Signed-off-by: default avatarEduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/r/20240820102357.3372779-4-eddyz87@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    f00bb757
verifier_spill_fill.c 38.7 KB