]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
selftests/btf: add VAR and DATASEC case for dedup tests
authorAndrii Nakryiko <andriin@fb.com>
Mon, 15 Apr 2019 23:48:08 +0000 (16:48 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 16 Apr 2019 07:50:20 +0000 (09:50 +0200)
Add test case verifying that dedup happens (INTs are deduped in this
case) and VAR/DATASEC types are not deduped, but have their referenced
type IDs adjusted correctly.

Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: Yonghong Song <yhs@fb.com>
Cc: Alexei Starovoitov <ast@fb.com>
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/testing/selftests/bpf/test_btf.c

index 44cd3378d216605c82de8f4207efc5093a46917d..f8eb7987b794f976ec1a4ca5a156d75c5735e986 100644 (file)
@@ -6642,6 +6642,51 @@ const struct btf_dedup_test dedup_tests[] = {
                .dont_resolve_fwds = false,
        },
 },
+{
+       .descr = "dedup: datasec and vars pass-through",
+       .input = {
+               .raw_types = {
+                       /* int */
+                       BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [1] */
+                       /* static int t */
+                       BTF_VAR_ENC(NAME_NTH(2), 1, 0),                 /* [2] */
+                       /* .bss section */                              /* [3] */
+                       BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
+                       BTF_VAR_SECINFO_ENC(2, 0, 4),
+                       /* int, referenced from [5] */
+                       BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [4] */
+                       /* another static int t */
+                       BTF_VAR_ENC(NAME_NTH(2), 4, 0),                 /* [5] */
+                       /* another .bss section */                      /* [6] */
+                       BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
+                       BTF_VAR_SECINFO_ENC(5, 0, 4),
+                       BTF_END_RAW,
+               },
+               BTF_STR_SEC("\0.bss\0t"),
+       },
+       .expect = {
+               .raw_types = {
+                       /* int */
+                       BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),  /* [1] */
+                       /* static int t */
+                       BTF_VAR_ENC(NAME_NTH(2), 1, 0),                 /* [2] */
+                       /* .bss section */                              /* [3] */
+                       BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
+                       BTF_VAR_SECINFO_ENC(2, 0, 4),
+                       /* another static int t */
+                       BTF_VAR_ENC(NAME_NTH(2), 1, 0),                 /* [4] */
+                       /* another .bss section */                      /* [5] */
+                       BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
+                       BTF_VAR_SECINFO_ENC(4, 0, 4),
+                       BTF_END_RAW,
+               },
+               BTF_STR_SEC("\0.bss\0t"),
+       },
+       .opts = {
+               .dont_resolve_fwds = false,
+               .dedup_table_size = 1
+       },
+},
 
 };
 
@@ -6671,6 +6716,10 @@ static int btf_type_size(const struct btf_type *t)
                return base_size + vlen * sizeof(struct btf_member);
        case BTF_KIND_FUNC_PROTO:
                return base_size + vlen * sizeof(struct btf_param);
+       case BTF_KIND_VAR:
+               return base_size + sizeof(struct btf_var);
+       case BTF_KIND_DATASEC:
+               return base_size + vlen * sizeof(struct btf_var_secinfo);
        default:
                fprintf(stderr, "Unsupported BTF_KIND:%u\n", kind);
                return -EINVAL;