selftests/bpf: Tests for enum fwd resolved as full enum64
A set of test cases to verify enum fwd resolution logic: - verify that enum fwd can be resolved as full enum64; - verify that enum64 fwd can be resolved as full enum; - verify that enum size is considered when enums are compared for equivalence. Signed-off-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20221101235413.1824260-2-eddyz87@gmail.com
This commit is contained in:
parent
de048b6ee8
commit
2e20f50ff8
@ -7133,7 +7133,7 @@ static struct btf_dedup_test dedup_tests[] = {
|
|||||||
BTF_ENUM_ENC(NAME_NTH(4), 456),
|
BTF_ENUM_ENC(NAME_NTH(4), 456),
|
||||||
/* [4] fwd enum 'e2' after full enum */
|
/* [4] fwd enum 'e2' after full enum */
|
||||||
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
|
||||||
/* [5] incompatible fwd enum with different size */
|
/* [5] fwd enum with different size, size does not matter for fwd */
|
||||||
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 1),
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 1),
|
||||||
/* [6] incompatible full enum with different value */
|
/* [6] incompatible full enum with different value */
|
||||||
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
||||||
@ -7150,9 +7150,7 @@ static struct btf_dedup_test dedup_tests[] = {
|
|||||||
/* [2] full enum 'e2' */
|
/* [2] full enum 'e2' */
|
||||||
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
||||||
BTF_ENUM_ENC(NAME_NTH(4), 456),
|
BTF_ENUM_ENC(NAME_NTH(4), 456),
|
||||||
/* [3] incompatible fwd enum with different size */
|
/* [3] incompatible full enum with different value */
|
||||||
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 1),
|
|
||||||
/* [4] incompatible full enum with different value */
|
|
||||||
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
|
||||||
BTF_ENUM_ENC(NAME_NTH(2), 321),
|
BTF_ENUM_ENC(NAME_NTH(2), 321),
|
||||||
BTF_END_RAW,
|
BTF_END_RAW,
|
||||||
@ -7611,7 +7609,87 @@ static struct btf_dedup_test dedup_tests[] = {
|
|||||||
BTF_STR_SEC("\0e1\0e1_val"),
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum of different size: 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] enum 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 2),
|
||||||
|
BTF_ENUM_ENC(NAME_NTH(2), 1),
|
||||||
|
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] enum 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 2),
|
||||||
|
BTF_ENUM_ENC(NAME_NTH(2), 1),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum fwd to enum64",
|
||||||
|
.input = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] enum64 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
|
||||||
|
/* [2] enum 'e1' fwd */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
|
||||||
|
/* [3] typedef enum 'e1' td */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 2),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0td"),
|
||||||
|
},
|
||||||
|
.expect = {
|
||||||
|
.raw_types = {
|
||||||
|
/* [1] enum64 'e1' */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 8),
|
||||||
|
BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
|
||||||
|
/* [2] typedef enum 'e1' td */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 1),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0td"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.descr = "dedup: enum64 fwd to enum",
|
||||||
|
.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' fwd */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 0), 8),
|
||||||
|
/* [3] typedef enum 'e1' td */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 2),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0td"),
|
||||||
|
},
|
||||||
|
.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] typedef enum 'e1' td */
|
||||||
|
BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 1),
|
||||||
|
BTF_END_RAW,
|
||||||
|
},
|
||||||
|
BTF_STR_SEC("\0e1\0e1_val\0td"),
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int btf_type_size(const struct btf_type *t)
|
static int btf_type_size(const struct btf_type *t)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user