@@ -6664,27 +6664,33 @@ const struct btf_dedup_test dedup_tests[] = {
6664
6664
BTF_MEMBER_ENC(NAME_NTH(4), 5, 64), /* const int *a; */
6665
6665
BTF_MEMBER_ENC(NAME_NTH(5), 2, 128), /* int b[16]; */
6666
6666
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; */
6668
6668
/* ptr -> [3] struct s */
6669
6669
BTF_PTR_ENC(3), /* [4] */
6670
6670
/* ptr -> [6] const int */
6671
6671
BTF_PTR_ENC(6), /* [5] */
6672
6672
/* const -> [1] int */
6673
6673
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] */
6674
6678
6675
6679
/* 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] */
6688
6694
BTF_END_RAW,
6689
6695
},
6690
6696
BTF_STR_SEC("\0int\0s\0next\0a\0b\0c\0float\0d"),
@@ -6701,14 +6707,16 @@ const struct btf_dedup_test dedup_tests[] = {
6701
6707
BTF_MEMBER_ENC(NAME_NTH(1), 5, 64), /* const int *a; */
6702
6708
BTF_MEMBER_ENC(NAME_NTH(2), 2, 128), /* int b[16]; */
6703
6709
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; */
6705
6711
/* ptr -> [3] struct s */
6706
6712
BTF_PTR_ENC(3), /* [4] */
6707
6713
/* ptr -> [6] const int */
6708
6714
BTF_PTR_ENC(6), /* [5] */
6709
6715
/* const -> [1] int */
6710
6716
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] */
6712
6720
BTF_END_RAW,
6713
6721
},
6714
6722
BTF_STR_SEC("\0a\0b\0c\0d\0int\0float\0next\0s"),
@@ -6833,9 +6841,11 @@ const struct btf_dedup_test dedup_tests[] = {
6833
6841
BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 8),
6834
6842
BTF_FUNC_ENC(NAME_TBD, 12), /* [13] func */
6835
6843
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 */
6836
6846
BTF_END_RAW,
6837
6847
},
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 "),
6839
6849
},
6840
6850
.expect = {
6841
6851
.raw_types = {
@@ -6859,9 +6869,11 @@ const struct btf_dedup_test dedup_tests[] = {
6859
6869
BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 8),
6860
6870
BTF_FUNC_ENC(NAME_TBD, 12), /* [13] func */
6861
6871
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 */
6862
6874
BTF_END_RAW,
6863
6875
},
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 "),
6865
6877
},
6866
6878
.opts = {
6867
6879
.dont_resolve_fwds = false,
@@ -7010,6 +7022,152 @@ const struct btf_dedup_test dedup_tests[] = {
7010
7022
.dedup_table_size = 1
7011
7023
},
7012
7024
},
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
+ },
7013
7171
7014
7172
};
7015
7173
0 commit comments