On Mon, Jun 10, 2019 at 9:49 PM Andrii Nakryiko <andriin@xxxxxx> wrote: > > Add file test for BTF-defined map definition. > > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> Acked-by: Song Liu <songliubraving@xxxxxx> > --- > .../selftests/bpf/progs/test_btf_newkv.c | 73 +++++++++++++++++++ > tools/testing/selftests/bpf/test_btf.c | 10 +-- > 2 files changed, 76 insertions(+), 7 deletions(-) > create mode 100644 tools/testing/selftests/bpf/progs/test_btf_newkv.c > > diff --git a/tools/testing/selftests/bpf/progs/test_btf_newkv.c b/tools/testing/selftests/bpf/progs/test_btf_newkv.c > new file mode 100644 > index 000000000000..28c16bb583b6 > --- /dev/null > +++ b/tools/testing/selftests/bpf/progs/test_btf_newkv.c > @@ -0,0 +1,73 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* Copyright (c) 2018 Facebook */ > +#include <linux/bpf.h> > +#include "bpf_helpers.h" > + > +int _version SEC("version") = 1; > + > +struct ipv_counts { > + unsigned int v4; > + unsigned int v6; > +}; > + > +/* just to validate we can handle maps in multiple sections */ > +struct bpf_map_def SEC("maps") btf_map_legacy = { > + .type = BPF_MAP_TYPE_ARRAY, > + .key_size = sizeof(int), > + .value_size = sizeof(long long), > + .max_entries = 4, > +}; > + > +BPF_ANNOTATE_KV_PAIR(btf_map_legacy, int, struct ipv_counts); > + > +struct { > + int *key; > + struct ipv_counts *value; > + unsigned int type; > + unsigned int max_entries; > +} btf_map SEC(".maps") = { > + .type = BPF_MAP_TYPE_ARRAY, > + .max_entries = 4, > +}; > + > +struct dummy_tracepoint_args { > + unsigned long long pad; > + struct sock *sock; > +}; > + > +__attribute__((noinline)) > +static int test_long_fname_2(struct dummy_tracepoint_args *arg) > +{ > + struct ipv_counts *counts; > + int key = 0; > + > + if (!arg->sock) > + return 0; > + > + counts = bpf_map_lookup_elem(&btf_map, &key); > + if (!counts) > + return 0; > + > + counts->v6++; > + > + /* just verify we can reference both maps */ > + counts = bpf_map_lookup_elem(&btf_map_legacy, &key); > + if (!counts) > + return 0; > + > + return 0; > +} > + > +__attribute__((noinline)) > +static int test_long_fname_1(struct dummy_tracepoint_args *arg) > +{ > + return test_long_fname_2(arg); > +} > + > +SEC("dummy_tracepoint") > +int _dummy_tracepoint(struct dummy_tracepoint_args *arg) > +{ > + return test_long_fname_1(arg); > +} > + > +char _license[] SEC("license") = "GPL"; > diff --git a/tools/testing/selftests/bpf/test_btf.c b/tools/testing/selftests/bpf/test_btf.c > index 289daf54dec4..8351cb5f4a20 100644 > --- a/tools/testing/selftests/bpf/test_btf.c > +++ b/tools/testing/selftests/bpf/test_btf.c > @@ -4016,13 +4016,9 @@ struct btf_file_test { > }; > > static struct btf_file_test file_tests[] = { > -{ > - .file = "test_btf_haskv.o", > -}, > -{ > - .file = "test_btf_nokv.o", > - .btf_kv_notfound = true, > -}, > + { .file = "test_btf_haskv.o", }, > + { .file = "test_btf_newkv.o", }, > + { .file = "test_btf_nokv.o", .btf_kv_notfound = true, }, > }; > > static int do_test_file(unsigned int test_num) > -- > 2.17.1 >