]> asedeno.scripts.mit.edu Git - linux.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)
commit9de2640b06ecf0e6ef4b24b07a5573a2804d77d0
tree76d632b50aa1560b31d29d76d232e682fad68691
parentc3969de8acbc3b1a0806f47d87e154790ac2946c
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