• Yonghong Song's avatar
    bpf: add bpffs multi-dimensional array tests in test_btf · 9de2640b
    Yonghong Song authored
    For multiple dimensional arrays like below,
      int a[2][3]
    both llvm and pahole generated one BTF_KIND_ARRAY type like
      . element_type: int
      . index_type: unsigned int
      . number of elements: 6
    
    Such a collapsed BTF_KIND_ARRAY type will cause the divergence
    in BTF vs. the user code. In the compile-once-run-everywhere
    project, the header file is generated from BTF and used for bpf
    program, and the definition in the header file will be different
    from what user expects.
    
    But the kernel actually supports chained multi-dimensional array
    types properly. The above "int a[2][3]" can be represented as
      Type #n:
        . element_type: int
        . index_type: unsigned int
        . number of elements: 3
      Type #(n+1):
        . element_type: type #n
        . index_type: unsigned int
        . number of elements: 2
    
    The following llvm commit
      https://reviews.llvm.org/rL357215
    also enables llvm to generated proper chained multi-dimensional arrays.
    
    The test_btf already has a raw test ("struct test #1") for chained
    multi-dimensional arrays. This patch added amended bpffs test for
    chained multi-dimensional arrays.
    Acked-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    9de2640b
test_btf.c 166 KB