On Thu, Mar 28, 2019 at 10:32 PM Yonghong Song <yhs@xxxxxx> wrote: > > 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@xxxxxx> > Signed-off-by: Yonghong Song <yhs@xxxxxx> Applied. Thanks