lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 204/879] selftests/bpf: fix btf_dump/btf_dump due to recent clang change
    Date
    From: Yonghong Song <yhs@fb.com>

    [ Upstream commit 4050764cbaa25760aab40857f723393c07898474 ]

    Latest llvm-project upstream had a change of behavior
    related to qualifiers on function return type ([1]).
    This caused selftests btf_dump/btf_dump failure.
    The following example shows what changed.

    $ cat t.c
    typedef const char * const (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
    struct t {
    int a;
    fn_ptr_arr2_t l;
    };
    int foo(struct t *arg) {
    return arg->a;
    }

    Compiled with latest upstream llvm15,
    $ clang -O2 -g -target bpf -S -emit-llvm t.c
    The related generated debuginfo IR looks like:
    !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
    !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !32)
    !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
    !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
    !20 = !DISubroutineType(types: !21)
    !21 = !{!22, null}
    !22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64)
    !23 = !DISubroutineType(types: !24)
    !24 = !{!25, !28}
    !25 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !26, size: 64)
    !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
    !27 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
    You can see two intermediate const qualifier to pointer are dropped in debuginfo IR.

    With llvm14, we have following debuginfo IR:
    !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
    !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !34)
    !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
    !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
    !20 = !DISubroutineType(types: !21)
    !21 = !{!22, null}
    !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !23)
    !23 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !24, size: 64)
    !24 = !DISubroutineType(types: !25)
    !25 = !{!26, !30}
    !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
    !27 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !28, size: 64)
    !28 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !29)
    !29 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
    All const qualifiers are preserved.

    To adapt the selftest to both old and new llvm, this patch removed
    the intermediate const qualifier in const-to-ptr types, to make the
    test succeed again.

    [1] https://reviews.llvm.org/D125919

    Reported-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20220523152044.3905809-1-yhs@fb.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c b/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
    index 1c7105fcae3c..4ee4748133fe 100644
    --- a/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
    +++ b/tools/testing/selftests/bpf/progs/btf_dump_test_case_syntax.c
    @@ -94,7 +94,7 @@ typedef void (* (*signal_t)(int, void (*)(int)))(int);

    typedef char * (*fn_ptr_arr1_t[10])(int **);

    -typedef char * (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
    +typedef char * (* (* const fn_ptr_arr2_t[5])())(char * (*)(int));

    struct struct_w_typedefs {
    int_t a;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-08 00:22    [W:2.748 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site