mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 21:03:32 +00:00
selftests/bpf: Test BTF_KIND_ENUM64 for deduplication
Add a few unit tests for BTF_KIND_ENUM64 deduplication. Acked-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/r/20220607062713.3725409-1-yhs@fb.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
3b5325186d
commit
adc26d134e
1 changed files with 95 additions and 2 deletions
|
@ -7016,9 +7016,12 @@ static struct btf_dedup_test dedup_tests[] = {
|
||||||
BTF_DECL_TAG_ENC(NAME_TBD, 13, 1), /* [16] decl_tag */
|
BTF_DECL_TAG_ENC(NAME_TBD, 13, 1), /* [16] decl_tag */
|
||||||
BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
|
BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
|
||||||
BTF_TYPE_TAG_ENC(NAME_TBD, 8), /* [18] type_tag */
|
BTF_TYPE_TAG_ENC(NAME_TBD, 8), /* [18] type_tag */
|
||||||
|
BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 2), 8), /* [19] enum64 */
|
||||||
|
BTF_ENUM64_ENC(NAME_TBD, 0, 0),
|
||||||
|
BTF_ENUM64_ENC(NAME_TBD, 1, 1),
|
||||||
BTF_END_RAW,
|
BTF_END_RAW,
|
||||||
},
|
},
|
||||||
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q\0R"),
|
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q\0R\0S\0T\0U"),
|
||||||
},
|
},
|
||||||
.expect = {
|
.expect = {
|
||||||
.raw_types = {
|
.raw_types = {
|
||||||
|
@ -7046,9 +7049,12 @@ static struct btf_dedup_test dedup_tests[] = {
|
||||||
BTF_DECL_TAG_ENC(NAME_TBD, 13, 1), /* [16] decl_tag */
|
BTF_DECL_TAG_ENC(NAME_TBD, 13, 1), /* [16] decl_tag */
|
||||||
BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
|
BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
|
||||||
BTF_TYPE_TAG_ENC(NAME_TBD, 8), /* [18] type_tag */
|
BTF_TYPE_TAG_ENC(NAME_TBD, 8), /* [18] type_tag */
|
||||||
|
BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 2), 8), /* [19] enum64 */
|
||||||
|
BTF_ENUM64_ENC(NAME_TBD, 0, 0),
|
||||||
|
BTF_ENUM64_ENC(NAME_TBD, 1, 1),
|
||||||
BTF_END_RAW,
|
BTF_END_RAW,
|
||||||
},
|
},
|
||||||
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q\0R"),
|
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P\0Q\0R\0S\0T\0U"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -7509,6 +7515,91 @@ static struct btf_dedup_test dedup_tests[] = {
|
||||||
BTF_STR_SEC("\0tag1\0t\0m"),
|
BTF_STR_SEC("\0tag1\0t\0m"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum64, standalone",
|
||||||
|
.input = {
|
||||||
|
.raw_types = {
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
|
},
|
||||||
|
.expect = {
|
||||||
|
.raw_types = {
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum64, fwd resolution",
|
||||||
|
.input = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] fwd enum64 'e1' before full enum */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 0), 8),
|
||||||
|
/* [2] full enum64 'e1' after fwd */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
|
||||||
|
/* [3] full enum64 'e2' before fwd */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(4), 0, 456),
|
||||||
|
/* [4] fwd enum64 'e2' after full enum */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 0), 8),
|
||||||
|
/* [5] incompatible full enum64 with different value */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 0, 321),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0e2\0e2_val"),
|
||||||
|
},
|
||||||
|
.expect = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] full enum64 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
|
||||||
|
/* [2] full enum64 'e2' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(4), 0, 456),
|
||||||
|
/* [3] incompatible full enum64 with different value */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 0, 321),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0e2\0e2_val"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum and enum64, no dedup",
|
||||||
|
.input = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] enum 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
||||||
|
BTF_ENUM_ENC(NAME_NTH(2), 1),
|
||||||
|
/* [2] enum64 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 4),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
|
},
|
||||||
|
.expect = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] enum 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
||||||
|
BTF_ENUM_ENC(NAME_NTH(2), 1),
|
||||||
|
/* [2] enum64 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 4),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7533,6 +7624,8 @@ static int btf_type_size(const struct btf_type *t)
|
||||||
return base_size + sizeof(__u32);
|
return base_size + sizeof(__u32);
|
||||||
case BTF_KIND_ENUM:
|
case BTF_KIND_ENUM:
|
||||||
return base_size + vlen * sizeof(struct btf_enum);
|
return base_size + vlen * sizeof(struct btf_enum);
|
||||||
|
case BTF_KIND_ENUM64:
|
||||||
|
return base_size + vlen * sizeof(struct btf_enum64);
|
||||||
case BTF_KIND_ARRAY:
|
case BTF_KIND_ARRAY:
|
||||||
return base_size + sizeof(struct btf_array);
|
return base_size + sizeof(struct btf_array);
|
||||||
case BTF_KIND_STRUCT:
|
case BTF_KIND_STRUCT:
|
||||||
|
|
Loading…
Reference in a new issue