]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: add bpffs multi-dimensional array tests in test_btf
authorYonghong Song <yhs@fb.com>
Fri, 29 Mar 2019 05:30:53 +0000 (22:30 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 1 Apr 2019 13:41:05 +0000 (15:41 +0200)
commitf99e7593d2242a93ea4ad313646085175bd7371f
tree76d632b50aa1560b31d29d76d232e682fad68691
parent5afcdf6fd07e2e70f3aa86e7d6859d261d6ee0d8
bpf: add bpffs multi-dimensional array tests in test_btf

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: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/test_btf.c