Skip to content

Commit ad52647

Browse files
yonghong-songAlexei Starovoitov
authored and
Alexei Starovoitov
committed
selftests/bpf: Test BTF_KIND_TAG for deduplication
Add unit tests for BTF_KIND_TAG deduplication for - struct and struct member - variable - func and func argument Signed-off-by: Yonghong Song <[email protected]> Signed-off-by: Alexei Starovoitov <[email protected]> Acked-by: Andrii Nakryiko <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 35baba7 commit ad52647

File tree

1 file changed

+175
-17
lines changed
  • tools/testing/selftests/bpf/prog_tests

1 file changed

+175
-17
lines changed

tools/testing/selftests/bpf/prog_tests/btf.c

Lines changed: 175 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6664,27 +6664,33 @@ const struct btf_dedup_test dedup_tests[] = {
66646664
BTF_MEMBER_ENC(NAME_NTH(4), 5, 64), /* const int *a; */
66656665
BTF_MEMBER_ENC(NAME_NTH(5), 2, 128), /* int b[16]; */
66666666
BTF_MEMBER_ENC(NAME_NTH(6), 1, 640), /* int c; */
6667-
BTF_MEMBER_ENC(NAME_NTH(8), 13, 672), /* float d; */
6667+
BTF_MEMBER_ENC(NAME_NTH(8), 15, 672), /* float d; */
66686668
/* ptr -> [3] struct s */
66696669
BTF_PTR_ENC(3), /* [4] */
66706670
/* ptr -> [6] const int */
66716671
BTF_PTR_ENC(6), /* [5] */
66726672
/* const -> [1] int */
66736673
BTF_CONST_ENC(1), /* [6] */
6674+
/* tag -> [3] struct s */
6675+
BTF_TAG_ENC(NAME_NTH(2), 3, -1), /* [7] */
6676+
/* tag -> [3] struct s, member 1 */
6677+
BTF_TAG_ENC(NAME_NTH(2), 3, 1), /* [8] */
66746678

66756679
/* full copy of the above */
6676-
BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4), /* [7] */
6677-
BTF_TYPE_ARRAY_ENC(7, 7, 16), /* [8] */
6678-
BTF_STRUCT_ENC(NAME_NTH(2), 5, 88), /* [9] */
6679-
BTF_MEMBER_ENC(NAME_NTH(3), 10, 0),
6680-
BTF_MEMBER_ENC(NAME_NTH(4), 11, 64),
6681-
BTF_MEMBER_ENC(NAME_NTH(5), 8, 128),
6682-
BTF_MEMBER_ENC(NAME_NTH(6), 7, 640),
6683-
BTF_MEMBER_ENC(NAME_NTH(8), 13, 672),
6684-
BTF_PTR_ENC(9), /* [10] */
6685-
BTF_PTR_ENC(12), /* [11] */
6686-
BTF_CONST_ENC(7), /* [12] */
6687-
BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [13] */
6680+
BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4), /* [9] */
6681+
BTF_TYPE_ARRAY_ENC(9, 9, 16), /* [10] */
6682+
BTF_STRUCT_ENC(NAME_NTH(2), 5, 88), /* [11] */
6683+
BTF_MEMBER_ENC(NAME_NTH(3), 12, 0),
6684+
BTF_MEMBER_ENC(NAME_NTH(4), 13, 64),
6685+
BTF_MEMBER_ENC(NAME_NTH(5), 10, 128),
6686+
BTF_MEMBER_ENC(NAME_NTH(6), 9, 640),
6687+
BTF_MEMBER_ENC(NAME_NTH(8), 15, 672),
6688+
BTF_PTR_ENC(11), /* [12] */
6689+
BTF_PTR_ENC(14), /* [13] */
6690+
BTF_CONST_ENC(9), /* [14] */
6691+
BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [15] */
6692+
BTF_TAG_ENC(NAME_NTH(2), 11, -1), /* [16] */
6693+
BTF_TAG_ENC(NAME_NTH(2), 11, 1), /* [17] */
66886694
BTF_END_RAW,
66896695
},
66906696
BTF_STR_SEC("\0int\0s\0next\0a\0b\0c\0float\0d"),
@@ -6701,14 +6707,16 @@ const struct btf_dedup_test dedup_tests[] = {
67016707
BTF_MEMBER_ENC(NAME_NTH(1), 5, 64), /* const int *a; */
67026708
BTF_MEMBER_ENC(NAME_NTH(2), 2, 128), /* int b[16]; */
67036709
BTF_MEMBER_ENC(NAME_NTH(3), 1, 640), /* int c; */
6704-
BTF_MEMBER_ENC(NAME_NTH(4), 7, 672), /* float d; */
6710+
BTF_MEMBER_ENC(NAME_NTH(4), 9, 672), /* float d; */
67056711
/* ptr -> [3] struct s */
67066712
BTF_PTR_ENC(3), /* [4] */
67076713
/* ptr -> [6] const int */
67086714
BTF_PTR_ENC(6), /* [5] */
67096715
/* const -> [1] int */
67106716
BTF_CONST_ENC(1), /* [6] */
6711-
BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [7] */
6717+
BTF_TAG_ENC(NAME_NTH(2), 3, -1), /* [7] */
6718+
BTF_TAG_ENC(NAME_NTH(2), 3, 1), /* [8] */
6719+
BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [9] */
67126720
BTF_END_RAW,
67136721
},
67146722
BTF_STR_SEC("\0a\0b\0c\0d\0int\0float\0next\0s"),
@@ -6833,9 +6841,11 @@ const struct btf_dedup_test dedup_tests[] = {
68336841
BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 8),
68346842
BTF_FUNC_ENC(NAME_TBD, 12), /* [13] func */
68356843
BTF_TYPE_FLOAT_ENC(NAME_TBD, 2), /* [14] float */
6844+
BTF_TAG_ENC(NAME_TBD, 13, -1), /* [15] tag */
6845+
BTF_TAG_ENC(NAME_TBD, 13, 1), /* [16] tag */
68366846
BTF_END_RAW,
68376847
},
6838-
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N"),
6848+
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P"),
68396849
},
68406850
.expect = {
68416851
.raw_types = {
@@ -6859,9 +6869,11 @@ const struct btf_dedup_test dedup_tests[] = {
68596869
BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 8),
68606870
BTF_FUNC_ENC(NAME_TBD, 12), /* [13] func */
68616871
BTF_TYPE_FLOAT_ENC(NAME_TBD, 2), /* [14] float */
6872+
BTF_TAG_ENC(NAME_TBD, 13, -1), /* [15] tag */
6873+
BTF_TAG_ENC(NAME_TBD, 13, 1), /* [16] tag */
68626874
BTF_END_RAW,
68636875
},
6864-
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N"),
6876+
BTF_STR_SEC("\0A\0B\0C\0D\0E\0F\0G\0H\0I\0J\0K\0L\0M\0N\0O\0P"),
68656877
},
68666878
.opts = {
68676879
.dont_resolve_fwds = false,
@@ -7010,6 +7022,152 @@ const struct btf_dedup_test dedup_tests[] = {
70107022
.dedup_table_size = 1
70117023
},
70127024
},
7025+
{
7026+
.descr = "dedup: func/func_arg/var tags",
7027+
.input = {
7028+
.raw_types = {
7029+
/* int */
7030+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7031+
/* static int t */
7032+
BTF_VAR_ENC(NAME_NTH(1), 1, 0), /* [2] */
7033+
/* void f(int a1, int a2) */
7034+
BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
7035+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7036+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(3), 1),
7037+
BTF_FUNC_ENC(NAME_NTH(4), 2), /* [4] */
7038+
/* tag -> t */
7039+
BTF_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7040+
BTF_TAG_ENC(NAME_NTH(5), 2, -1), /* [6] */
7041+
/* tag -> func */
7042+
BTF_TAG_ENC(NAME_NTH(5), 4, -1), /* [7] */
7043+
BTF_TAG_ENC(NAME_NTH(5), 4, -1), /* [8] */
7044+
/* tag -> func arg a1 */
7045+
BTF_TAG_ENC(NAME_NTH(5), 4, 1), /* [9] */
7046+
BTF_TAG_ENC(NAME_NTH(5), 4, 1), /* [10] */
7047+
BTF_END_RAW,
7048+
},
7049+
BTF_STR_SEC("\0t\0a1\0a2\0f\0tag"),
7050+
},
7051+
.expect = {
7052+
.raw_types = {
7053+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7054+
BTF_VAR_ENC(NAME_NTH(1), 1, 0), /* [2] */
7055+
BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
7056+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7057+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(3), 1),
7058+
BTF_FUNC_ENC(NAME_NTH(4), 2), /* [4] */
7059+
BTF_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7060+
BTF_TAG_ENC(NAME_NTH(5), 4, -1), /* [6] */
7061+
BTF_TAG_ENC(NAME_NTH(5), 4, 1), /* [7] */
7062+
BTF_END_RAW,
7063+
},
7064+
BTF_STR_SEC("\0t\0a1\0a2\0f\0tag"),
7065+
},
7066+
.opts = {
7067+
.dont_resolve_fwds = false,
7068+
},
7069+
},
7070+
{
7071+
.descr = "dedup: func/func_param tags",
7072+
.input = {
7073+
.raw_types = {
7074+
/* int */
7075+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7076+
/* void f(int a1, int a2) */
7077+
BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
7078+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(1), 1),
7079+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7080+
BTF_FUNC_ENC(NAME_NTH(3), 2), /* [3] */
7081+
/* void f(int a1, int a2) */
7082+
BTF_FUNC_PROTO_ENC(0, 2), /* [4] */
7083+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(1), 1),
7084+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7085+
BTF_FUNC_ENC(NAME_NTH(3), 4), /* [5] */
7086+
/* tag -> f: tag1, tag2 */
7087+
BTF_TAG_ENC(NAME_NTH(4), 3, -1), /* [6] */
7088+
BTF_TAG_ENC(NAME_NTH(5), 3, -1), /* [7] */
7089+
/* tag -> f/a2: tag1, tag2 */
7090+
BTF_TAG_ENC(NAME_NTH(4), 3, 1), /* [8] */
7091+
BTF_TAG_ENC(NAME_NTH(5), 3, 1), /* [9] */
7092+
/* tag -> f: tag1, tag3 */
7093+
BTF_TAG_ENC(NAME_NTH(4), 5, -1), /* [10] */
7094+
BTF_TAG_ENC(NAME_NTH(6), 5, -1), /* [11] */
7095+
/* tag -> f/a2: tag1, tag3 */
7096+
BTF_TAG_ENC(NAME_NTH(4), 5, 1), /* [12] */
7097+
BTF_TAG_ENC(NAME_NTH(6), 5, 1), /* [13] */
7098+
BTF_END_RAW,
7099+
},
7100+
BTF_STR_SEC("\0a1\0a2\0f\0tag1\0tag2\0tag3"),
7101+
},
7102+
.expect = {
7103+
.raw_types = {
7104+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7105+
BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
7106+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(1), 1),
7107+
BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7108+
BTF_FUNC_ENC(NAME_NTH(3), 2), /* [3] */
7109+
BTF_TAG_ENC(NAME_NTH(4), 3, -1), /* [4] */
7110+
BTF_TAG_ENC(NAME_NTH(5), 3, -1), /* [5] */
7111+
BTF_TAG_ENC(NAME_NTH(6), 3, -1), /* [6] */
7112+
BTF_TAG_ENC(NAME_NTH(4), 3, 1), /* [7] */
7113+
BTF_TAG_ENC(NAME_NTH(5), 3, 1), /* [8] */
7114+
BTF_TAG_ENC(NAME_NTH(6), 3, 1), /* [9] */
7115+
BTF_END_RAW,
7116+
},
7117+
BTF_STR_SEC("\0a1\0a2\0f\0tag1\0tag2\0tag3"),
7118+
},
7119+
.opts = {
7120+
.dont_resolve_fwds = false,
7121+
},
7122+
},
7123+
{
7124+
.descr = "dedup: struct/struct_member tags",
7125+
.input = {
7126+
.raw_types = {
7127+
/* int */
7128+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7129+
BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [2] */
7130+
BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7131+
BTF_MEMBER_ENC(NAME_NTH(3), 1, 32),
7132+
BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [3] */
7133+
BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7134+
BTF_MEMBER_ENC(NAME_NTH(3), 1, 32),
7135+
/* tag -> t: tag1, tag2 */
7136+
BTF_TAG_ENC(NAME_NTH(4), 2, -1), /* [4] */
7137+
BTF_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7138+
/* tag -> t/m2: tag1, tag2 */
7139+
BTF_TAG_ENC(NAME_NTH(4), 2, 1), /* [6] */
7140+
BTF_TAG_ENC(NAME_NTH(5), 2, 1), /* [7] */
7141+
/* tag -> t: tag1, tag3 */
7142+
BTF_TAG_ENC(NAME_NTH(4), 3, -1), /* [8] */
7143+
BTF_TAG_ENC(NAME_NTH(6), 3, -1), /* [9] */
7144+
/* tag -> t/m2: tag1, tag3 */
7145+
BTF_TAG_ENC(NAME_NTH(4), 3, 1), /* [10] */
7146+
BTF_TAG_ENC(NAME_NTH(6), 3, 1), /* [11] */
7147+
BTF_END_RAW,
7148+
},
7149+
BTF_STR_SEC("\0t\0m1\0m2\0tag1\0tag2\0tag3"),
7150+
},
7151+
.expect = {
7152+
.raw_types = {
7153+
BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7154+
BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [2] */
7155+
BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7156+
BTF_MEMBER_ENC(NAME_NTH(3), 1, 32),
7157+
BTF_TAG_ENC(NAME_NTH(4), 2, -1), /* [3] */
7158+
BTF_TAG_ENC(NAME_NTH(5), 2, -1), /* [4] */
7159+
BTF_TAG_ENC(NAME_NTH(6), 2, -1), /* [5] */
7160+
BTF_TAG_ENC(NAME_NTH(4), 2, 1), /* [6] */
7161+
BTF_TAG_ENC(NAME_NTH(5), 2, 1), /* [7] */
7162+
BTF_TAG_ENC(NAME_NTH(6), 2, 1), /* [8] */
7163+
BTF_END_RAW,
7164+
},
7165+
BTF_STR_SEC("\0t\0m1\0m2\0tag1\0tag2\0tag3"),
7166+
},
7167+
.opts = {
7168+
.dont_resolve_fwds = false,
7169+
},
7170+
},
70137171

70147172
};
70157173

0 commit comments

Comments
 (0)