mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 05:44:11 +00:00
selftests/btf: add VAR and DATASEC case for dedup tests
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>
This commit is contained in:
parent
189cf5a4a7
commit
efb2ddc4ce
1 changed files with 49 additions and 0 deletions
|
@ -6642,6 +6642,51 @@ const struct btf_dedup_test dedup_tests[] = {
|
||||||
.dont_resolve_fwds = false,
|
.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);
|
return base_size + vlen * sizeof(struct btf_member);
|
||||||
case BTF_KIND_FUNC_PROTO:
|
case BTF_KIND_FUNC_PROTO:
|
||||||
return base_size + vlen * sizeof(struct btf_param);
|
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:
|
default:
|
||||||
fprintf(stderr, "Unsupported BTF_KIND:%u\n", kind);
|
fprintf(stderr, "Unsupported BTF_KIND:%u\n", kind);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Reference in a new issue