Lines Matching +full:2 +full:- +full:4

1 /* SPDX-License-Identifier: GPL-2.0 */
100 * int q[4][8];
108 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
110 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
114 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
117 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
120 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
121 BTF_MEMBER_ENC(NAME_TBD, 6, 384),/* int q[4][8] */
124 /* int[4][8] */
125 BTF_TYPE_ARRAY_ENC(4, 1, 4), /* [6] */
127 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), sizeof(int)),
140 .max_entries = 4,
147 * struct b n[4];
148 * const Struct_B o[4];
157 .descr = "struct test #2",
160 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
161 /* struct b [4] */ /* [2] */
162 BTF_TYPE_ARRAY_ENC(4, 1, 4),
167 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* struct B n[4] */
168 BTF_MEMBER_ENC(NAME_TBD, 8, 288),/* const Struct_B o[4];*/
171 /* struct B { */ /* [4] */
172 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 8),
180 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 4),
183 /* const Struct_B [4] */ /* [8] */
184 BTF_TYPE_ARRAY_ENC(7, 1, 4),
195 .max_entries = 4,
201 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
202 /* int64 */ /* [2] */
206 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 16),
208 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* int64 n; */
220 .max_entries = 4,
237 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
239 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
243 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
245 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
246 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
249 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
261 .max_entries = 4,
271 * static struct A t; <- in .bss
274 .descr = "global data test #2",
277 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
279 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
283 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
285 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
286 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
289 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
312 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
314 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
316 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
317 BTF_VAR_SECINFO_ENC(2, 0, 4),
325 .value_size = 4,
331 .descr = "global data test #4, unsupported linkage",
334 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
336 BTF_VAR_ENC(NAME_TBD, 1, 2), /* [2] */
338 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
339 BTF_VAR_SECINFO_ENC(2, 0, 4),
347 .value_size = 4,
359 /* .bss section */ /* [2] */
360 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
361 BTF_VAR_SECINFO_ENC(1, 0, 4),
369 .value_size = 4,
371 .value_type_id = 2,
383 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
385 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
386 BTF_VAR_SECINFO_ENC(2, 0, 4),
394 .value_size = 4,
396 .value_type_id = 2,
408 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
410 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
411 BTF_VAR_SECINFO_ENC(1, 0, 4),
419 .value_size = 4,
421 .value_type_id = 2,
430 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
432 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
436 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
438 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
439 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
442 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
467 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
469 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
473 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
475 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
476 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
479 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
504 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
506 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
510 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
512 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
513 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
516 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
541 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
543 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
547 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
549 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
550 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
553 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
560 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 2), 62),
562 BTF_VAR_SECINFO_ENC(7, 58, 4),
579 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
581 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
585 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
587 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
588 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
591 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
598 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 2), 62),
600 BTF_VAR_SECINFO_ENC(7, 60, 4),
619 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
621 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
625 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
627 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
628 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
631 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
638 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 2), 62),
640 BTF_VAR_SECINFO_ENC(7, 12, 4),
659 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
661 BTF_TYPE_INT_ENC(0, 0, 0, 64, 8), /* [2] */
665 BTF_TYPE_ARRAY_ENC(1, 1, 8), /* [4] */
667 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 4), 48),
668 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* unsigned long long m;*/
671 BTF_MEMBER_ENC(NAME_TBD, 4, 128),/* int p[8] */
678 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 2), 62),
679 BTF_VAR_SECINFO_ENC(7, 58, 4),
699 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
700 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
702 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
703 BTF_VAR_SECINFO_ENC(1, 0, 4),
711 .value_size = 4,
722 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
723 BTF_VAR_ENC(NAME_TBD, 5, 0), /* [2] */
724 BTF_VAR_ENC(NAME_TBD, 2, 0), /* [3] */
725 /* a section */ /* [4] */
726 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
727 BTF_VAR_SECINFO_ENC(3, 0, 4),
729 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
730 BTF_VAR_SECINFO_ENC(6, 0, 4),
739 .value_size = 4,
741 .value_type_id = 4,
750 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
751 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
752 BTF_VAR_ENC(NAME_TBD, 2, 0), /* [3] */
753 /* a section */ /* [4] */
754 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
755 BTF_VAR_SECINFO_ENC(3, 0, 4),
763 .value_size = 4,
765 .value_type_id = 4,
774 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
775 BTF_VAR_ENC(NAME_TBD, 2, 0), /* [2] */
777 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
778 BTF_VAR_SECINFO_ENC(2, 0, 4),
786 .value_size = 4,
788 .value_type_id = 4,
797 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
798 BTF_VAR_ENC(NAME_TBD, 3, 0), /* [2] */
807 .value_size = 4,
809 .value_type_id = 4,
818 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
819 /* PTR type_id=3 */ /* [2] */
829 .value_size = 4,
831 .value_type_id = 4,
840 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
841 /* struct A { */ /* [2] */
842 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), sizeof(int) * 2),
854 .value_size = 4,
856 .value_type_id = 4,
865 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
866 BTF_TYPE_ARRAY_ENC(3, 1, 4), /* [2] */
875 .value_size = 4,
877 .value_type_id = 4,
886 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 2),
887 sizeof(void*)+4),
888 BTF_VAR_SECINFO_ENC(4, 0, sizeof(void*)),
889 BTF_VAR_SECINFO_ENC(6, sizeof(void*), 4),
890 /* int */ /* [2] */
891 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
893 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 2),
894 BTF_VAR_ENC(NAME_TBD, 3, 0), /* [4] */
896 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 2),
905 .value_size = sizeof(void*)+4,
921 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
922 /* struct A { */ /* [2] */
923 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), sizeof(int) * 2 - 1),
936 .value_type_id = 2,
937 .max_entries = 4,
946 * int n[2];
950 .descr = "size check test #2",
954 /* int[2] */ /* [2] */
955 BTF_TYPE_ARRAY_ENC(1, 1, 2),
957 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), sizeof(int) * 3 - 1),
959 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* int n[2]; */
971 .max_entries = 4,
988 /* void* */ /* [2] */
991 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), sizeof(int) + sizeof(void *) - 1),
993 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* void *n; */
1005 .max_entries = 4,
1023 .descr = "size check test #4",
1027 /* enum E { */ /* [2] */
1028 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), sizeof(int)),
1033 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), sizeof(int) * 2 - 1),
1035 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* enum E n; */
1047 .max_entries = 4,
1069 /* char */ /* [2] */
1072 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 1),
1076 /* struct A { */ /* [4] */
1077 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 2),
1078 BTF_MEMBER_ENC(NAME_TBD, 2, 0), /* char m; */
1088 .value_size = 2,
1090 .value_type_id = 4,
1091 .max_entries = 4,
1103 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1104 /* const void */ /* [2] */
1107 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 2),
1109 BTF_TYPEDEF_ENC(NAME_TBD, 3), /* [4] */
1113 BTF_MEMBER_ENC(NAME_TBD, 4, 0),
1124 .value_type_id = 4,
1125 .max_entries = 4,
1133 .descr = "void test #2",
1136 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1137 /* const void */ /* [2] */
1142 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
1154 .max_entries = 4,
1160 * const_void_ptr[4]
1166 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1167 /* const void */ /* [2] */
1170 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 2),
1172 BTF_TYPEDEF_ENC(NAME_TBD, 3), /* [4] */
1173 /* const_void_ptr[4] */
1174 BTF_TYPE_ARRAY_ENC(4, 1, 4), /* [5] */
1182 .value_size = sizeof(void *) * 4,
1185 .max_entries = 4,
1188 /* const void[4] */
1190 .descr = "void test #4",
1193 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1194 /* const void */ /* [2] */
1196 /* const void[4] */ /* [3] */
1197 BTF_TYPE_ARRAY_ENC(2, 1, 4),
1205 .value_size = sizeof(void *) * 4,
1208 .max_entries = 4,
1213 /* Array_A <------------------+
1217 * Array_B <-------- + |
1218 * elem_type == Array A --+
1224 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1225 /* Array_A */ /* [2] */
1228 BTF_TYPE_ARRAY_ENC(2, 1, 8),
1238 .value_type_id = 2,
1239 .max_entries = 4,
1248 * Array_A <------------------+
1252 * Array_B <-------- + |
1253 * elem_type == Array_A --+
1256 .descr = "loop test #2",
1259 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
1261 BTF_TYPEDEF_ENC(1, 4), /* [2] */
1263 BTF_TYPE_ARRAY_ENC(2, 1, 8), /* [3] */
1265 BTF_TYPE_ARRAY_ENC(3, 1, 8), /* [4] */
1275 .value_type_id = 2,
1276 .max_entries = 4,
1281 /* Array_A <------------------+
1285 * Array_B <-------- + |
1286 * elem_type == Array_A --+
1292 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1293 /* Array_A */ /* [2] */
1296 BTF_TYPE_ARRAY_ENC(2, 1, 8),
1306 .value_type_id = 2,
1307 .max_entries = 4,
1316 * Array_A <------------------+
1320 * Array_B <-------- + |
1321 * elem_type == Array_A --+
1324 .descr = "loop test #4",
1327 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1328 /* Array_A */ /* [2] */
1331 BTF_TYPEDEF_ENC(NAME_TBD, 4),
1332 /* Array_B */ /* [4] */
1333 BTF_TYPE_ARRAY_ENC(2, 1, 8),
1343 .value_type_id = 2,
1344 .max_entries = 4,
1365 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
1366 /* struct A */ /* [2] */
1367 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 8),
1371 BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */
1372 /* struct B */ /* [4] */
1373 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 8),
1375 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* struct A y; */
1385 .value_type_id = 2,
1386 .max_entries = 4,
1393 * struct A array_a[4];
1400 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
1401 BTF_TYPE_ARRAY_ENC(3, 1, 4), /* [2] */
1403 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 2), 8),
1405 BTF_MEMBER_ENC(NAME_TBD, 2, 32),/* struct A array_a[4]; */
1415 .value_type_id = 2,
1416 .max_entries = 4,
1425 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1426 /* struct A { */ /* [2] */
1431 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 4),
1432 /* PTR type_id=2 */ /* [4] */
1443 .value_type_id = 2,
1444 .max_entries = 4,
1453 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1454 /* struct A { */ /* [2] */
1457 BTF_MEMBER_ENC(NAME_TBD, 4, 0),
1462 /* CONST type_id=5 */ /* [4] */
1468 /* PTR type_id=4 */ /* [7] */
1469 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 4),
1479 .value_type_id = 2,
1480 .max_entries = 4,
1489 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1493 .str_sec_size = sizeof("\0int") - 1,
1500 .max_entries = 4,
1509 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1520 .max_entries = 4,
1538 .max_entries = 4,
1547 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1558 .max_entries = 4,
1560 .hdr_len_delta = 4,
1568 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1579 .max_entries = 4,
1581 .type_off_delta = 4,
1589 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1600 .max_entries = 4,
1602 .str_off_delta = 4,
1610 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1621 .max_entries = 4,
1623 .str_off_delta = -4,
1631 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1642 .max_entries = 4,
1644 .str_len_delta = -4,
1652 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
1663 .max_entries = 4,
1665 .str_len_delta = 4,
1673 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1674 /* int[16] */ /* [2] */
1686 .max_entries = 4,
1693 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1694 /* int[16] */ /* [2] */
1708 .max_entries = 4,
1715 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1716 /* int:31 */ /* [2] */
1717 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 31, 4),
1719 BTF_TYPE_ARRAY_ENC(1, 4, 16),
1720 /* CONST type_id=2 */ /* [4] */
1721 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 2),
1732 .max_entries = 4,
1741 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1742 /* int:31 */ /* [2] */
1743 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 31, 4),
1745 BTF_TYPE_ARRAY_ENC(4, 1, 16),
1746 /* CONST type_id=2 */ /* [4] */
1747 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 2),
1758 .max_entries = 4,
1767 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1768 /* int[16] */ /* [2] */
1780 .max_entries = 4,
1789 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1790 /* int[16] */ /* [2] */
1804 .max_entries = 4,
1813 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1814 /* int[16] */ /* [2] */
1828 .max_entries = 4,
1837 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1838 /* const void *[16] */ /* [2] */
1840 /* CONST type_id=4 */ /* [3] */
1841 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 4),
1842 /* void* */ /* [4] */
1854 .max_entries = 4,
1861 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1862 /* const void *[16] */ /* [2] */
1864 /* CONST type_id=4 */ /* [3] */
1865 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 4),
1866 /* void* */ /* [4] */
1878 .max_entries = 4,
1884 .descr = "array test. t->size != 0\"",
1887 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1888 /* int[16] */ /* [2] */
1901 .max_entries = 4,
1909 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_INT, 0, 0), 4),
1921 .max_entries = 4,
1930 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1931 BTF_TYPE_ENC(0, 0x20000000, 4),
1942 .max_entries = 4,
1948 .descr = "fwd test. t->type != 0\"",
1951 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
1952 /* fwd type */ /* [2] */
1964 .max_entries = 4,
1972 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
1973 BTF_TYPEDEF_ENC(0, 1), /* [2] */
1984 .max_entries = 4,
1992 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
1993 BTF_TYPEDEF_ENC(NAME_TBD, 1), /* [2] */
2004 .max_entries = 4,
2012 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2014 BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 1), /* [2] */
2025 .max_entries = 4,
2033 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2035 BTF_INFO_ENC(BTF_KIND_VOLATILE, 0, 0), 1), /* [2] */
2046 .max_entries = 4,
2054 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2056 BTF_INFO_ENC(BTF_KIND_CONST, 0, 0), 1), /* [2] */
2067 .max_entries = 4,
2075 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2076 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 1), /* [2] */
2078 BTF_INFO_ENC(BTF_KIND_RESTRICT, 0, 0), 2), /* [3] */
2089 .max_entries = 4,
2097 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2098 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_FWD, 0, 0), 0), /* [2] */
2109 .max_entries = 4,
2117 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2119 BTF_INFO_ENC(BTF_KIND_FWD, 0, 0), 0), /* [2] */
2130 .max_entries = 4,
2138 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2140 BTF_INFO_ENC(BTF_KIND_ARRAY, 0, 0), 0), /* [2] */
2141 BTF_ARRAY_ENC(1, 1, 4),
2152 .max_entries = 4,
2160 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2162 BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4), /* [2] */
2174 .max_entries = 4,
2180 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2182 BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4), /* [2] */
2194 .max_entries = 4,
2202 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2204 BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4), /* [2] */
2216 .max_entries = 4,
2222 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2224 BTF_INFO_ENC(BTF_KIND_STRUCT, 0, 1), 4), /* [2] */
2236 .max_entries = 4,
2244 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2247 sizeof(int)), /* [2] */
2259 .max_entries = 4,
2265 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2268 sizeof(int)), /* [2] */
2280 .max_entries = 4,
2288 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2291 sizeof(int)), /* [2] */
2303 .max_entries = 4,
2311 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2314 sizeof(int)), /* [2] */
2326 .max_entries = 4,
2334 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
2335 /* 32 bit int with 32 bit offset */ /* [2] */
2345 .key_type_id = 2,
2347 .max_entries = 4,
2355 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
2356 /* 16 bit int with 0 bit offset */ /* [2] */
2357 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 16, 2),
2366 .key_type_id = 2,
2368 .max_entries = 4,
2376 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
2384 /* btf_value_size < map->value_size */
2388 .max_entries = 4,
2396 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
2404 /* btf_value_size > map->value_size */
2408 .max_entries = 4,
2415 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2416 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2418 BTF_FUNC_PROTO_ENC(1, 2), /* [3] */
2420 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2431 .max_entries = 4,
2437 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2438 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2442 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2454 .max_entries = 4,
2460 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2461 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2465 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2477 .max_entries = 4,
2485 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2486 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2491 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2502 .max_entries = 4,
2504 .err_str = "Invalid arg#2",
2510 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2511 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2515 BTF_CONST_ENC(3), /* [4] */
2517 BTF_FUNC_PROTO_ENC(0, 2), /* [6] */
2519 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2530 .max_entries = 4,
2536 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2537 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2538 BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */
2539 BTF_FUNC_PROTO_ENC(0, 2), /* [4] */
2541 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2552 .max_entries = 4,
2558 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2560 BTF_FUNC_PROTO_ENC(0, 1), /* [2] */
2562 BTF_CONST_ENC(4), /* [3] */
2563 BTF_PTR_ENC(0), /* [4] */
2574 .max_entries = 4,
2580 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2581 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2583 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2585 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2596 .max_entries = 4,
2602 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2603 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2605 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2607 BTF_FUNC_PROTO_ARG_ENC(0x0fffffff, 2),
2618 .max_entries = 4,
2620 .err_str = "Invalid arg#2",
2626 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2627 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2629 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2631 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2642 .max_entries = 4,
2644 .err_str = "Invalid arg#2",
2650 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2651 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2653 BTF_FUNC_PROTO_ENC(100, 2), /* [3] */
2655 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2666 .max_entries = 4,
2674 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2675 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2677 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_FUNC_PROTO, 0, 2), 0), /* [3] */
2679 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2690 .max_entries = 4,
2698 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2699 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2702 BTF_FUNC_PROTO_ARG_ENC(0, 4),
2703 BTF_CONST_ENC(0), /* [4] */
2714 .max_entries = 4,
2722 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2723 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2725 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2727 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2729 BTF_FUNC_ENC(NAME_TBD, 3), /* [4] */
2740 .max_entries = 4,
2746 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2747 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2749 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2751 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2753 BTF_FUNC_ENC(0, 3), /* [4] */
2764 .max_entries = 4,
2772 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2773 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2775 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2777 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2779 BTF_FUNC_ENC(NAME_TBD, 3), /* [4] */
2790 .max_entries = 4,
2798 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2799 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2801 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2803 BTF_FUNC_PROTO_ARG_ENC(0, 2),
2805 BTF_FUNC_ENC(NAME_TBD, 3), /* [4] */
2816 .max_entries = 4,
2818 .err_str = "Invalid arg#2",
2824 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2825 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [2] */
2827 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
2829 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
2831 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_FUNC, 0, 2), 3), /* [4] */
2842 .max_entries = 4,
2850 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2851 BTF_FUNC_ENC(NAME_TBD, 1), /* [2] */
2862 .max_entries = 4,
2870 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2871 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_INT, 1, 0), 4), /* [2] */
2882 .max_entries = 4,
2890 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2891 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 1, 0), 1), /* [2] */
2901 .max_entries = 4,
2909 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2910 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ARRAY, 1, 0), 0), /* [2] */
2921 .max_entries = 4,
2929 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2931 BTF_INFO_ENC(BTF_KIND_FWD, 1, 0), 0), /* [2] */
2941 .max_entries = 4,
2947 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2949 BTF_INFO_ENC(BTF_KIND_TYPEDEF, 1, 0), 1), /* [2] */
2959 .max_entries = 4,
2967 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2968 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_VOLATILE, 1, 0), 1), /* [2] */
2978 .max_entries = 4,
2986 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
2987 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_CONST, 1, 0), 1), /* [2] */
2997 .max_entries = 4,
3005 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3006 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_RESTRICT, 1, 0), 1), /* [2] */
3016 .max_entries = 4,
3024 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3025 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_FUNC_PROTO, 0, 0), 0), /* [2] */
3026 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_FUNC, 1, 0), 2), /* [3] */
3036 .max_entries = 4,
3044 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3045 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_FUNC_PROTO, 1, 0), 0), /* [2] */
3055 .max_entries = 4,
3063 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3064 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 8), /* [2] */
3076 .max_entries = 4,
3082 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3083 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4), /* [2] */
3084 BTF_MEMBER_ENC(NAME_TBD, 1, BTF_MEMBER_OFFSET(4, 0)),
3085 BTF_MEMBER_ENC(NAME_TBD, 1, BTF_MEMBER_OFFSET(4, 4)),
3095 .max_entries = 4,
3101 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3102 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 1, 2), 4), /* [2] */
3103 BTF_MEMBER_ENC(NAME_TBD, 1, BTF_MEMBER_OFFSET(4, 0)),
3104 BTF_MEMBER_ENC(NAME_TBD, 1, BTF_MEMBER_OFFSET(4, 0)),
3114 .max_entries = 4,
3120 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3121 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), /* [2] */
3123 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4),/* [3] */
3124 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(4, 0)),
3125 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(4, 4)),
3135 .max_entries = 4,
3141 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3142 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), /* [2] */
3144 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 1, 2), 4), /* [3] */
3145 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(4, 0)),
3146 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(4, 0)),
3156 .max_entries = 4,
3162 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3163 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), /* [2] */
3165 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4),/* [3] */
3166 BTF_MEMBER_ENC(NAME_TBD, 4, BTF_MEMBER_OFFSET(4, 0)),
3167 BTF_MEMBER_ENC(NAME_TBD, 5, BTF_MEMBER_OFFSET(4, 4)),
3168 BTF_TYPEDEF_ENC(NAME_TBD, 1), /* [4] */
3169 BTF_TYPEDEF_ENC(NAME_TBD, 2), /* [5] */
3179 .max_entries = 4,
3185 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3186 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), /* [2] */
3188 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 1, 2), 4), /* [3] */
3189 BTF_MEMBER_ENC(NAME_TBD, 4, BTF_MEMBER_OFFSET(4, 0)),
3190 BTF_MEMBER_ENC(NAME_TBD, 5, BTF_MEMBER_OFFSET(4, 0)),
3191 BTF_TYPEDEF_ENC(NAME_TBD, 1), /* [4] */
3192 BTF_TYPEDEF_ENC(NAME_TBD, 2), /* [5] */
3202 .max_entries = 4,
3208 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3209 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4), /* [2] */
3221 .max_entries = 4,
3229 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3230 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 20, 4), /* [2] */
3231 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4), /* [3] */
3232 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(20, 0)),
3233 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(20, 20)),
3243 .max_entries = 4,
3251 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3252 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 12, 4), /* [2] */
3253 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 4), /* [3] */
3254 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(8, 0)),
3255 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(8, 8)),
3265 .max_entries = 4,
3273 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3274 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 1, 2), 2), /* [2] */
3286 .max_entries = 4,
3294 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3295 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
3296 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 12), /* [3] */
3297 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 0)),
3298 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 36)),
3308 .max_entries = 4,
3316 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3317 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
3318 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4), /* [2] */
3320 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 2), 12), /* [3] */
3321 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 0)),
3322 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 36)),
3332 .max_entries = 4,
3338 .descr = "128-bit int",
3340 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3341 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16), /* [2] */
3351 .max_entries = 4,
3355 .descr = "struct, 128-bit int member",
3357 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3358 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16), /* [2] */
3360 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3370 .max_entries = 4,
3374 .descr = "struct, 120-bit int member bitfield",
3376 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3377 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 120, 16), /* [2] */
3379 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3389 .max_entries = 4,
3393 .descr = "struct, kind_flag, 128-bit int member",
3395 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3396 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16), /* [2] */
3398 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 0)),
3408 .max_entries = 4,
3412 .descr = "struct, kind_flag, 120-bit int member bitfield",
3414 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3415 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 128, 16), /* [2] */
3417 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(120, 0)),
3427 .max_entries = 4,
3436 .descr = "struct->ptr->typedef->array->int size resolution",
3439 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3440 BTF_PTR_ENC(3), /* [2] */
3441 BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */
3442 BTF_TYPE_ARRAY_ENC(5, 5, 16), /* [4] */
3443 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [5] */
3453 .max_entries = 4,
3456 * typedef int arr_t[16][8][4];
3462 .descr = "struct->ptr->typedef->multi-array->int size resolution",
3465 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3466 BTF_PTR_ENC(3), /* [2] */
3467 BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */
3468 BTF_TYPE_ARRAY_ENC(5, 7, 16), /* [4] */
3470 BTF_TYPE_ARRAY_ENC(7, 7, 4), /* [6] */
3471 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [7] */
3478 .value_size = sizeof(int) * 16 * 8 * 4,
3481 .max_entries = 4,
3485 * typedef int_t arr3_t[4];
3493 .descr = "typedef/multi-arr mix size resolution",
3496 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3497 BTF_PTR_ENC(3), /* [2] */
3498 BTF_TYPEDEF_ENC(NAME_TBD, 4), /* [3] */
3499 BTF_TYPE_ARRAY_ENC(5, 10, 16), /* [4] */
3503 BTF_TYPE_ARRAY_ENC(9, 10, 4), /* [8] */
3505 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [10] */
3512 .value_size = sizeof(int) * 16 * 8 * 4,
3515 .max_entries = 4,
3518 * elf .rodata section size 4 and btf .rodata section vlen 0.
3524 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3526 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 0), 4),
3527 /* [2] */
3542 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3543 /* VAR x */ /* [2] */
3547 BTF_TYPE_ENC(3, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
3548 BTF_VAR_SECINFO_ENC(2, 0, 4),
3554 .descr = "datasec: name with non-printable first char not is ok",
3557 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3558 /* VAR x */ /* [2] */
3562 BTF_TYPE_ENC(3, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
3563 BTF_VAR_SECINFO_ENC(2, 0, 4),
3574 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3575 /* VAR x */ /* [2] */
3579 BTF_TYPE_ENC(3, BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
3580 BTF_VAR_SECINFO_ENC(2, 0, 4),
3600 .descr = "float test #1, well-formed",
3602 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3604 BTF_TYPE_FLOAT_ENC(NAME_TBD, 2), /* [2] */
3605 BTF_TYPE_FLOAT_ENC(NAME_TBD, 4), /* [3] */
3606 BTF_TYPE_FLOAT_ENC(NAME_TBD, 8), /* [4] */
3610 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3612 BTF_MEMBER_ENC(NAME_TBD, 4, 64),
3628 .descr = "float test #2, invalid vlen",
3630 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3632 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_FLOAT, 0, 1), 4),
3633 /* [2] */
3640 .value_size = 4,
3642 .value_type_id = 2,
3650 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3652 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_FLOAT, 1, 0), 4),
3653 /* [2] */
3660 .value_size = 4,
3662 .value_type_id = 2,
3668 .descr = "float test #4, member does not fit",
3670 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3672 BTF_TYPE_FLOAT_ENC(NAME_TBD, 4), /* [2] */
3673 BTF_STRUCT_ENC(NAME_TBD, 1, 2), /* [3] */
3674 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
3681 .value_size = 4,
3691 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3693 BTF_TYPE_FLOAT_ENC(NAME_TBD, 4), /* [2] */
3695 BTF_MEMBER_ENC(NAME_TBD, 2, 8),
3702 .value_size = 4,
3712 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
3714 BTF_TYPE_FLOAT_ENC(NAME_TBD, 6), /* [2] */
3723 .value_type_id = 2,
3730 .descr = "decl_tag test #1, struct/member, well-formed",
3732 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3733 BTF_STRUCT_ENC(0, 2, 8), /* [2] */
3736 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1),
3737 BTF_DECL_TAG_ENC(NAME_TBD, 2, 0),
3738 BTF_DECL_TAG_ENC(NAME_TBD, 2, 1),
3747 .value_type_id = 2,
3751 .descr = "decl_tag test #2, union/member, well-formed",
3753 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3754 BTF_UNION_ENC(NAME_TBD, 2, 4), /* [2] */
3757 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1),
3758 BTF_DECL_TAG_ENC(NAME_TBD, 2, 0),
3759 BTF_DECL_TAG_ENC(NAME_TBD, 2, 1),
3766 .value_size = 4,
3768 .value_type_id = 2,
3772 .descr = "decl_tag test #3, variable, well-formed",
3774 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3775 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
3777 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1),
3778 BTF_DECL_TAG_ENC(NAME_TBD, 3, -1),
3785 .value_size = 4,
3791 .descr = "decl_tag test #4, func/parameter, well-formed",
3793 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3794 BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
3797 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
3798 BTF_DECL_TAG_ENC(NAME_TBD, 3, -1),
3807 .value_size = 4,
3815 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3816 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
3817 BTF_DECL_TAG_ENC(0, 2, -1),
3824 .value_size = 4,
3834 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3835 BTF_DECL_TAG_ENC(NAME_TBD, 1, -1),
3842 .value_size = 4,
3852 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3853 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
3854 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DECL_TAG, 0, 1), 2), (0),
3861 .value_size = 4,
3871 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3872 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
3873 BTF_DECL_ATTR_ENC(NAME_TBD, 2, -1),
3880 .value_size = 4,
3888 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3889 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
3890 BTF_DECL_TAG_ENC(NAME_TBD, 2, 0),
3897 .value_size = 4,
3907 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3908 BTF_STRUCT_ENC(0, 2, 8), /* [2] */
3911 BTF_DECL_TAG_ENC(NAME_TBD, 2, 2),
3920 .value_type_id = 2,
3928 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3929 BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
3932 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
3933 BTF_DECL_TAG_ENC(NAME_TBD, 3, 2),
3940 .value_size = 4,
3948 .descr = "decl_tag test #12, < -1 component_idx",
3950 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3951 BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
3954 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
3955 BTF_DECL_TAG_ENC(NAME_TBD, 3, -2),
3962 .value_size = 4,
3970 .descr = "decl_tag test #13, typedef, well-formed",
3972 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3973 BTF_TYPEDEF_ENC(NAME_TBD, 1), /* [2] */
3974 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1),
3981 .value_size = 4,
3989 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
3990 BTF_TYPEDEF_ENC(NAME_TBD, 1), /* [2] */
3991 BTF_DECL_TAG_ENC(NAME_TBD, 2, 0),
3998 .value_size = 4,
4008 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4009 BTF_DECL_TAG_ENC(NAME_TBD, 3, 0), /* [2] */
4017 .value_size = 4,
4027 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4028 BTF_VAR_ENC(NAME_TBD, 1, 0), /* [2] */
4029 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DECL_TAG, 0, 0), 2), (-1), /* [3] */
4030 BTF_FUNC_PROTO_ENC(3, 0), /* [4] */
4040 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_DECL_TAG, 0, 0), 4), (-1), /* [1] */
4041 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_PTR, 0, 0), 0), /* [2] */
4044 BTF_VAR_ENC(NAME_TBD, 2, 0), /* [4] */
4054 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4055 BTF_STRUCT_ENC(0, 2, 8), /* [2] */
4058 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1), /* [3] */
4065 .value_size = 4,
4074 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4075 BTF_STRUCT_ENC(0, 2, 8), /* [2] */
4078 BTF_DECL_TAG_ENC(NAME_TBD, 2, -1), /* [3] */
4084 .key_size = 4,
4094 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4095 BTF_TYPE_TAG_ENC(NAME_TBD, 1), /* [2] */
4096 BTF_PTR_ENC(2), /* [3] */
4103 .value_size = 4,
4109 .descr = "type_tag test #2, type tag order",
4111 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4112 BTF_CONST_ENC(3), /* [2] */
4120 .value_size = 4,
4130 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4131 BTF_TYPE_TAG_ENC(NAME_TBD, 3), /* [2] */
4132 BTF_CONST_ENC(4), /* [3] */
4133 BTF_TYPE_TAG_ENC(NAME_TBD, 1), /* [4] */
4140 .value_size = 4,
4148 .descr = "type_tag test #4, type tag order",
4150 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4151 BTF_TYPEDEF_ENC(NAME_TBD, 3), /* [2] */
4152 BTF_CONST_ENC(4), /* [3] */
4153 BTF_TYPE_TAG_ENC(NAME_TBD, 1), /* [4] */
4160 .value_size = 4,
4170 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4171 BTF_TYPE_TAG_ENC(NAME_TBD, 3), /* [2] */
4173 BTF_TYPE_TAG_ENC(NAME_TBD, 2), /* [4] */
4180 .value_size = 4,
4188 BTF_PTR_ENC(2), /* [1] */
4189 BTF_TYPE_TAG_ENC(NAME_TBD, 3), /* [2] */
4190 BTF_CONST_ENC(4), /* [3] */
4191 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [4] */
4193 BTF_CONST_ENC(2), /* [6] */
4200 .value_size = 4,
4210 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4211 BTF_TYPE_ATTR_ENC(NAME_TBD, 1), /* [2] */
4212 BTF_PTR_ENC(2), /* [3] */
4219 .value_size = 4,
4227 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4228 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 2), 8), /* [2] */
4239 .value_type_id = 2,
4243 .descr = "enum64 test #2, signed, size 4",
4245 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
4246 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 1, 2), 4), /* [2] */
4247 BTF_ENUM64_ENC(NAME_TBD, -1, 0),
4255 .value_size = 4,
4257 .value_type_id = 2,
4265 return start < end - 1 ? start + 1 : NULL;
4272 for (i = MAX_NR_RAW_U32 - 1;
4274 i--)
4312 strs_cap += max(16, strs_cap / 2);
4317 err = -1;
4333 err = -1;
4336 ret_types[i] = strs_idx[next_str_idx++] - str;
4343 err = -1;
4346 ret_types[i] = strs_idx[idx-1] - str;
4357 ret_hdr->type_len = type_sec_size;
4358 ret_hdr->str_off = type_sec_size;
4359 ret_hdr->str_len = str_sec_size;
4399 struct btf_raw_test *test = &raw_tests[test_num - 1];
4401 int map_fd = -1, btf_fd = -1;
4407 if (!test__start_subtest(test->descr))
4411 test->raw_types,
4412 test->str_sec,
4413 test->str_sec_size,
4420 hdr->hdr_len = (int)hdr->hdr_len + test->hdr_len_delta;
4421 hdr->type_off = (int)hdr->type_off + test->type_off_delta;
4422 hdr->str_off = (int)hdr->str_off + test->str_off_delta;
4423 hdr->str_len = (int)hdr->str_len + test->str_len_delta;
4429 err = ((btf_fd < 0) != test->btf_load_err);
4430 if (CHECK(err, "btf_fd:%d test->btf_load_err:%u",
4431 btf_fd, test->btf_load_err) ||
4432 CHECK(test->err_str && !strstr(btf_log_buf, test->err_str),
4433 "expected err_str:%s\n", test->err_str)) {
4434 err = -1;
4441 if (!test->map_type)
4445 opts.btf_key_type_id = test->key_type_id;
4446 opts.btf_value_type_id = test->value_type_id;
4447 map_fd = bpf_map_create(test->map_type, test->map_name,
4448 test->key_size, test->value_size, test->max_entries, &opts);
4450 err = ((map_fd < 0) != test->map_create_err);
4451 CHECK(err, "map_fd:%d test->map_create_err:%u",
4452 map_fd, test->map_create_err);
4480 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
4488 .descr = "== raw_btf_size-3",
4491 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
4496 .btf_size_delta = -3,
4502 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
4513 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4),
4514 /* unsigned int */ /* [2] */
4515 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4),
4526 const struct btf_get_info_test *test = &get_info_tests[test_num - 1];
4534 int btf_fd = -1, err;
4538 test->raw_types,
4539 test->str_sec,
4540 test->str_sec_size,
4544 return -1;
4550 err = -1;
4556 err = -1;
4568 info->btf = ptr_to_u64(user_btf);
4569 info->btf_size = raw_btf_size;
4573 err = -1;
4588 err = -1;
4609 const struct btf_get_info_test *test = &get_info_tests[test_num - 1];
4611 uint8_t *raw_btf = NULL, *user_btf[2] = {};
4612 int btf_fd[2] = {-1, -1}, map_fd = -1;
4614 struct bpf_btf_info info[2] = {};
4620 test->raw_types,
4621 test->str_sec,
4622 test->str_sec_size,
4626 return -1;
4630 for (i = 0; i < 2; i++) {
4633 err = -1;
4642 err = -1;
4650 err = -1;
4656 err = -1;
4668 err = -1;
4675 opts.btf_value_type_id = 2;
4677 sizeof(int), sizeof(int), 4, &opts);
4679 err = -1;
4686 map_info.btf_key_type_id != 1 || map_info.btf_value_type_id != 2,
4690 err = -1;
4694 for (i = 0; i < 2; i++) {
4696 btf_fd[i] = -1;
4702 err = -1;
4706 btf_fd[0] = -1;
4710 map_fd = -1;
4721 for (i = 0; i < 2; i++) {
4732 const struct btf_get_info_test *test = &get_info_tests[test_num - 1];
4736 int btf_fd = -1, err, ret;
4739 if (!test__start_subtest(test->descr))
4742 if (test->special_test) {
4743 err = test->special_test(test_num);
4749 test->raw_types,
4750 test->str_sec,
4751 test->str_sec_size,
4761 err = -1;
4767 err = -1;
4771 user_btf_size = (int)raw_btf_size + test->btf_size_delta;
4775 raw_btf_size - expected_nbytes);
4789 err = -1;
4796 "user_btf[%u]:%x != 0xff", expected_nbytes - 1,
4797 user_btf[expected_nbytes - 1])) {
4798 err = -1;
4828 const struct btf_file_test *test = &file_tests[test_num - 1];
4844 if (!test__start_subtest(test->file))
4847 btf = btf__parse_elf(test->file, &btf_ext);
4850 if (err == -ENOENT) {
4864 obj = bpf_object__open(test->file);
4871 err = -1;
4883 err = -1;
4888 != test->btf_kv_notfound;
4889 if (CHECK(err, "btf_key_type_id:%u btf_value_type_id:%u test->btf_kv_notfound:%u",
4891 test->btf_kv_notfound))
4903 err = -1;
4909 err = -1;
4915 err = -1;
4921 err = -1;
4933 if (CHECK(err < 0, "invalid get info (2nd) errno:%d", errno)) {
4935 err = -1;
4939 "incorrect info.nr_func_info (2nd) %d",
4941 err = -1;
4945 "incorrect info.func_info_rec_size (2nd) %d",
4947 err = -1;
4962 t = btf__type_by_id(btf, finfo->type_id);
4964 finfo->type_id)) {
4965 err = -1;
4969 fname = btf__name_by_offset(btf, t->name_off);
4975 err = strcmp(fname, expected_fnames[3 - i]);
4977 err = -1;
5005 /* 2 bytes hole */
5007 uint32_t unused_bits2a:2,
5009 unused_bits2b:2;
5021 uint32_t bits2c:2;
5022 uint8_t si8_4[2][2];
5040 /* unsigned short */ /* [2] */
5041 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 16, 2),
5043 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4),
5044 /* int */ /* [4] */
5045 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
5048 /* 2 bits */ /* [6] */
5049 BTF_TYPE_INT_ENC(0, 0, 0, 2, 2),
5051 BTF_TYPE_INT_ENC(0, 0, 0, 28, 4),
5057 BTF_TYPEDEF_ENC(NAME_TBD, 2),
5061 BTF_TYPEDEF_ENC(NAME_TBD, 4),
5065 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 0, 2), 8),
5069 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 4), 4),
5072 BTF_ENUM_ENC(NAME_TBD, 2),
5087 BTF_TYPE_ARRAY_ENC(18, 1, 2), /* [17] */
5088 BTF_TYPE_ARRAY_ENC(1, 1, 2), /* [18] */
5107 /* unsigned short */ /* [2] */
5108 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 16, 2),
5110 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4),
5111 /* int */ /* [4] */
5112 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
5115 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [6] */
5116 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [7] */
5122 BTF_TYPEDEF_ENC(NAME_TBD, 2),
5126 BTF_TYPEDEF_ENC(NAME_TBD, 4),
5130 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 0, 2), 8),
5134 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 4), 4),
5137 BTF_ENUM_ENC(NAME_TBD, 2),
5144 BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 96)), /* unused_bits2a */
5146 BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 126)), /* unused_bits2b */
5150 BTF_MEMBER_ENC(NAME_TBD, 6, BTF_MEMBER_OFFSET(2, 256)), /* bits2c */
5152 BTF_TYPE_ARRAY_ENC(18, 1, 2), /* [17] */
5153 BTF_TYPE_ARRAY_ENC(1, 1, 2), /* [18] */
5174 /* unsigned short */ /* [2] */
5175 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 16, 2),
5177 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4),
5178 /* int */ /* [4] */
5179 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4),
5182 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [6] */
5183 BTF_TYPE_INT_ENC(0, 0, 0, 32, 4), /* [7] */
5189 BTF_TYPEDEF_ENC(NAME_TBD, 2),
5193 BTF_TYPEDEF_ENC(NAME_TBD, 4),
5197 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_UNION, 0, 2), 8),
5201 BTF_TYPE_ENC(0, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 4), 4),
5204 BTF_ENUM_ENC(NAME_TBD, 2),
5211 BTF_MEMBER_ENC(NAME_TBD, 17, BTF_MEMBER_OFFSET(2, 96)), /* unused_bits2a */
5213 BTF_MEMBER_ENC(NAME_TBD, 19, BTF_MEMBER_OFFSET(2, 126)),/* unused_bits2b */
5217 BTF_MEMBER_ENC(NAME_TBD, 17, BTF_MEMBER_OFFSET(2, 256)), /* bits2c */
5223 BTF_TYPE_ARRAY_ENC(21, 1, 2), /* [20] */
5224 BTF_TYPE_ARRAY_ENC(1, 1, 2), /* [21] */
5240 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4),
5241 /* __int128 */ /* [2] */
5245 /* struct pprint_mapv_int128 */ /* [4] */
5247 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 0)), /* si128a */
5248 BTF_MEMBER_ENC(NAME_TBD, 2, BTF_MEMBER_OFFSET(0, 128)), /* si128b */
5258 .value_type_id = 4,
5354 v->ui32 = i + cpu;
5355 v->si32 = -i;
5356 v->unused_bits2a = 3;
5357 v->bits28 = i;
5358 v->unused_bits2b = 3;
5359 v->ui64 = i;
5360 v->aenum = i & 0x03;
5361 v->ui32b = 4;
5362 v->bits2c = 1;
5363 v->si8_4[0][0] = (cpu + i) & 0xff;
5364 v->si8_4[0][1] = (cpu + i + 1) & 0xff;
5365 v->si8_4[1][0] = (cpu + i + 2) & 0xff;
5366 v->si8_4[1][1] = (cpu + i + 3) & 0xff;
5376 v->si128a = i;
5377 v->si128b = -i;
5378 v->bits3 = i & 0x07;
5379 v->bits80 = (((unsigned __int128)1) << 64) + i;
5380 v->ui128 = (((unsigned __int128)2) << 64) + i;
5392 ssize_t nexpected_line = -1;
5403 v->ui32, v->si32,
5404 v->unused_bits2a,
5405 v->bits28,
5406 v->unused_bits2b,
5407 (__u64)v->ui64,
5408 v->ui8a[0], v->ui8a[1],
5409 v->ui8a[2], v->ui8a[3],
5410 v->ui8a[4], v->ui8a[5],
5411 v->ui8a[6], v->ui8a[7],
5412 pprint_enum_str[v->aenum],
5413 v->ui32b,
5414 v->bits2c,
5415 v->si8_4[0][0], v->si8_4[0][1],
5416 v->si8_4[1][0], v->si8_4[1][1]);
5428 (uint64_t)v->si128a,
5429 (uint64_t)v->si128b,
5430 (uint64_t)v->bits3,
5431 (uint64_t)(v->bits80 >> 64),
5432 (uint64_t)v->bits80,
5433 (uint64_t)(v->ui128 >> 64),
5434 (uint64_t)v->ui128);
5446 return -1;
5452 return -1;
5462 enum pprint_mapv_kind_t mapv_kind = test->mapv_kind;
5467 int map_fd = -1, btf_fd = -1;
5478 if (!test__start_subtest(test->descr))
5481 raw_btf = btf_raw_create(&hdr_tmpl, test->raw_types,
5482 test->str_sec, test->str_sec_size,
5493 err = -1;
5498 opts.btf_key_type_id = test->key_type_id;
5499 opts.btf_value_type_id = test->value_type_id;
5500 map_fd = bpf_map_create(test->map_type, test->map_name,
5501 test->key_size, test->value_size, test->max_entries, &opts);
5503 err = -1;
5508 "/sys/fs/bpf", test->map_name);
5511 "/sys/fs/bpf", test->map_name)) {
5512 err = -1;
5520 percpu_map = test->percpu_map;
5525 err = -1;
5529 for (key = 0; key < test->max_entries; key++) {
5536 err = -1;
5546 err = -1;
5551 ordered_map = test->ordered_map;
5552 lossless_map = test->lossless_map;
5613 } while (++nr_read_elems < test->max_entries && nread > 0);
5616 CHECK(nr_read_elems < test->max_entries,
5617 "Unexpected EOF. nr_read_elems:%u test->max_entries:%u",
5618 nr_read_elems, test->max_entries)) {
5619 err = -1;
5624 err = -1;
5686 __u32 func_info[MAX_SUBPROGS][2];
5701 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5702 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4), /* [2] */
5703 BTF_FUNC_PROTO_ENC(1, 2), /* [3] */
5705 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5706 BTF_FUNC_PROTO_ENC(1, 2), /* [4] */
5707 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5710 BTF_FUNC_ENC(NAME_TBD, 4), /* [6] */
5716 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
5719 BPF_MOV64_IMM(BPF_REG_0, 2),
5725 .func_info_cnt = 2,
5732 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5733 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4), /* [2] */
5734 BTF_FUNC_PROTO_ENC(1, 2), /* [3] */
5736 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5737 BTF_FUNC_PROTO_ENC(1, 2), /* [4] */
5738 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5741 BTF_FUNC_ENC(NAME_TBD, 4), /* [6] */
5747 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
5750 BPF_MOV64_IMM(BPF_REG_0, 2),
5755 .func_info_rec_size = 4,
5756 .func_info_cnt = 2,
5764 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5765 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4), /* [2] */
5766 BTF_FUNC_PROTO_ENC(1, 2), /* [3] */
5768 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5769 BTF_FUNC_PROTO_ENC(1, 2), /* [4] */
5770 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5773 BTF_FUNC_ENC(NAME_TBD, 4), /* [6] */
5779 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
5782 BPF_MOV64_IMM(BPF_REG_0, 2),
5796 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5797 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 32, 4), /* [2] */
5798 BTF_FUNC_PROTO_ENC(1, 2), /* [3] */
5800 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5801 BTF_FUNC_PROTO_ENC(1, 2), /* [4] */
5802 BTF_FUNC_PROTO_ARG_ENC(NAME_TBD, 2),
5805 BTF_FUNC_ENC(NAME_TBD, 4), /* [6] */
5811 BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
5814 BPF_MOV64_IMM(BPF_REG_0, 2),
5818 .func_info = { {0, 5}, {2, 6} },
5820 .func_info_cnt = 2,
5828 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5831 BTF_STR_SEC("\0int\0int a=1;\0int b=2;\0return a + b;\0return a + b;"),
5834 BPF_MOV64_IMM(BPF_REG_1, 2),
5842 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 9),
5843 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8),
5844 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 7),
5852 .descr = "line_info (No subprog. insn_off >= prog->len)",
5854 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5857 BTF_STR_SEC("\0int\0int a=1;\0int b=2;\0return a + b;\0return a + b;"),
5860 BPF_MOV64_IMM(BPF_REG_1, 2),
5868 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 9),
5869 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8),
5870 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 7),
5871 BPF_LINE_INFO_ENC(4, 0, 0, 5, 6),
5876 .err_str = "line_info[4].insn_off",
5883 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5884 BTF_TYPE_INT_ENC(NAME_TBD, 0, 0, 64, 8), /* [2] */
5885 BTF_TYPEDEF_ENC(NAME_TBD, 2), /* [3] */
5897 BPF_LINE_INFO_ENC(1, 0, 0, 2, 9),
5898 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8),
5910 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5913 BTF_STR_SEC("\0int\0int a=1;\0int b=2;\0return a + b;\0return a + b;"),
5916 BPF_MOV64_IMM(BPF_REG_1, 2),
5924 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 9), 0,
5925 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8), 0,
5926 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 7), 0,
5936 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5939 BTF_STR_SEC("\0int\0int a=1;\0int b=2;\0return a + b;\0return a + b;"),
5942 BPF_MOV64_IMM(BPF_REG_1, 2),
5950 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 9), 0,
5951 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8), 0,
5952 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 7), 1,
5964 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5982 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 2, 9),
5984 BPF_LINE_INFO_ENC(7, 0, NAME_TBD, 4, 7),
5988 .nr_jited_ksyms = 2,
5994 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
5995 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
5997 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
5998 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6013 .func_info_cnt = 2,
6015 .func_info = { {0, 4}, {5, 3} },
6018 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 2, 9),
6020 BPF_LINE_INFO_ENC(7, 0, NAME_TBD, 4, 7),
6024 .nr_jited_ksyms = 2,
6030 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6048 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 2, 9),
6050 BPF_LINE_INFO_ENC(7, 0, NAME_TBD, 4, 7),
6054 .nr_jited_ksyms = 2,
6060 .descr = "line_info (subprog. missing 2nd func line info)",
6062 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6080 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 2, 9),
6082 BPF_LINE_INFO_ENC(7, 0, NAME_TBD, 4, 7),
6086 .nr_jited_ksyms = 2,
6094 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6112 BPF_LINE_INFO_ENC(5, 0, NAME_TBD, 2, 9),
6113 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8),
6114 BPF_LINE_INFO_ENC(7, 0, NAME_TBD, 4, 7),
6118 .nr_jited_ksyms = 2,
6119 .err_str = "Invalid line_info[2].insn_off",
6126 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6129 BTF_STR_SEC("\0int\0/* dead jmp */\0int a=1;\0int b=2;\0return a + b;\0return a + b;"),
6133 BPF_MOV64_IMM(BPF_REG_1, 2),
6141 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 9),
6142 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 8),
6143 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 7),
6144 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 5, 6),
6156 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6159 BTF_STR_SEC("\0int\0int a=1;\0int b=2;\0return a + b;\0/* dead jmp */\0return a + b;\0/* dead exit */"),
6162 BPF_MOV64_IMM(BPF_REG_1, 2),
6172 BPF_LINE_INFO_ENC(1, 0, NAME_TBD, 2, 11),
6173 BPF_LINE_INFO_ENC(2, 0, NAME_TBD, 3, 10),
6174 BPF_LINE_INFO_ENC(3, 0, NAME_TBD, 4, 9),
6175 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 5, 8),
6181 .dead_code_cnt = 2,
6188 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6189 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6191 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6192 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6219 .func_info_cnt = 2,
6221 .func_info = { {0, 4}, {14, 3} },
6225 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 1, 10),
6232 BPF_LINE_INFO_ENC(11, 0, NAME_TBD, 2, 9),
6233 BPF_LINE_INFO_ENC(12, 0, NAME_TBD, 2, 9),
6235 BPF_LINE_INFO_ENC(16, 0, NAME_TBD, 4, 7),
6239 .nr_jited_ksyms = 2,
6247 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6248 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6250 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6251 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6252 BTF_FUNC_ENC(NAME_TBD, 2), /* [5] */
6269 BPF_MOV64_REG(BPF_REG_0, 2),
6276 .func_info = { {0, 4}, {6, 3}, {9, 5} },
6280 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 1, 10),
6287 BPF_LINE_INFO_ENC(11, 0, NAME_TBD, 2, 9),
6291 .nr_jited_ksyms = 2,
6301 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6302 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6304 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6305 BTF_FUNC_ENC(NAME_TBD, 2), /* [5] */
6313 BPF_CALL_REL(2),
6320 .func_info_cnt = 2,
6322 .func_info = { {0, 4}, {5, 3} },
6326 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 1, 10),
6333 .dead_code_cnt = 2,
6342 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6343 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6345 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6346 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6347 BTF_FUNC_ENC(NAME_TBD, 2), /* [5] */
6366 BPF_MOV64_REG(BPF_REG_0, 2),
6373 .func_info = { {0, 4}, {7, 3}, {10, 5} },
6377 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 1, 10),
6384 BPF_LINE_INFO_ENC(11, 0, NAME_TBD, 2, 9),
6385 BPF_LINE_INFO_ENC(12, 0, NAME_TBD, 2, 9),
6386 BPF_LINE_INFO_ENC(13, 0, NAME_TBD, 2, 9),
6390 .nr_jited_ksyms = 2,
6400 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6401 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6403 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6404 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6405 BTF_FUNC_ENC(NAME_TBD, 2), /* [5] */
6423 BPF_MOV64_REG(BPF_REG_0, 2),
6430 .func_info = { {0, 4}, {6, 3}, {9, 5} },
6434 BPF_LINE_INFO_ENC(4, 0, NAME_TBD, 1, 10),
6441 BPF_LINE_INFO_ENC(12, 0, NAME_TBD, 2, 9),
6445 .nr_jited_ksyms = 2,
6455 BTF_TYPE_INT_ENC(NAME_TBD, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
6456 BTF_FUNC_PROTO_ENC(1, 1), /* [2] */
6458 BTF_FUNC_ENC(NAME_TBD, 2), /* [3] */
6459 BTF_FUNC_ENC(NAME_TBD, 2), /* [4] */
6474 .func_info_cnt = 2,
6476 .func_info = { {0, 3}, {6, 4}, },
6483 .nr_jited_ksyms = 2,
6492 for (len = MAX_INSNS - 1; len > 0; --len)
6508 if (raw_u32_size == -1)
6509 return ERR_PTR(-EINVAL);
6518 return ERR_PTR(-ENOMEM);
6525 return ERR_PTR(-EINVAL);
6527 new_u32[i] = next_str - str;
6553 return -1;
6555 nr_func_info = test->func_info_cnt - test->dead_func_cnt;
6559 return -1;
6565 return -1;
6573 return -1;
6581 if (CHECK(err < 0, "invalid get info (2nd) errno:%d", errno)) {
6583 err = -1;
6587 "incorrect info.nr_func_info (2nd) %d",
6589 err = -1;
6593 "incorrect info.func_info_rec_size (2nd) %d",
6595 err = -1;
6601 if (test->dead_func_mask & (1 << i))
6603 if (CHECK(finfo->type_id != test->func_info[i][1],
6605 finfo->type_id, test->func_info[i][1])) {
6606 err = -1;
6637 if (test->nr_jited_ksyms)
6638 nr_jited_ksyms = test->nr_jited_ksyms;
6640 nr_jited_ksyms = test->func_info_cnt - test->dead_func_cnt;
6646 err = -1;
6667 err = -1;
6676 err = -1;
6690 err = -1;
6705 err = -1;
6738 err = -1;
6743 while (test->dead_code_mask & (1 << dead_insns))
6751 while (test->dead_code_mask & (1 << (i + dead_insns)))
6755 ((i + dead_insns) * test->line_info_rec_size);
6756 if (CHECK(linfo[i].insn_off <= linfo[i - 1].insn_off,
6759 i - 1, linfo[i - 1].insn_off)) {
6760 err = -1;
6763 if (CHECK(linfo[i].file_name_off != expected_linfo->file_name_off ||
6764 linfo[i].line_off != expected_linfo->line_off ||
6765 linfo[i].line_col != expected_linfo->line_col,
6770 expected_linfo->file_name_off,
6771 expected_linfo->line_off,
6772 expected_linfo->line_col)) {
6773 err = -1;
6787 err = -1;
6803 if (CHECK(jited_linfo[i] <= jited_linfo[i - 1],
6806 i - 1, (long)(jited_linfo[i - 1]))) {
6807 err = -1;
6811 if (CHECK(jited_linfo[i] - cur_func_ksyms > cur_func_len,
6812 "jited_linfo[%u]:%lx - %lx > %u",
6815 err = -1;
6823 err = -1;
6839 const struct prog_info_raw_test *test = &info_raw_tests[test_num - 1];
6841 int btf_fd = -1, prog_fd = -1, err = 0;
6846 if (!test__start_subtest(test->descr))
6849 raw_btf = btf_raw_create(&hdr_tmpl, test->raw_types,
6850 test->str_sec, test->str_sec_size,
6860 err = -1;
6868 linfo_str_off = ret_next_str - test->str_sec;
6869 patched_linfo = patch_name_tbd(test->line_info,
6870 test->str_sec, linfo_str_off,
6871 test->str_sec_size, &linfo_size);
6875 err = -1;
6879 attr.prog_type = test->prog_type;
6880 attr.insns = ptr_to_u64(test->insns);
6881 attr.insn_cnt = probe_prog_length(test->insns);
6884 attr.func_info_rec_size = test->func_info_rec_size;
6885 attr.func_info_cnt = test->func_info_cnt;
6886 attr.func_info = ptr_to_u64(test->func_info);
6891 attr.line_info_rec_size = test->line_info_rec_size;
6897 err = ((prog_fd < 0) != test->expected_prog_load_failure);
6899 prog_fd, test->expected_prog_load_failure, errno) ||
6900 CHECK(test->err_str && !strstr(btf_log_buf, test->err_str),
6901 "expected err_str:%s", test->err_str)) {
6902 err = -1;
6914 attr.line_info_cnt - test->dead_code_cnt,
6951 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 32, 4),
6959 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4),
6960 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 64, 8),
6970 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4),
6971 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 64, 8),
6972 BTF_TYPE_INT_ENC(NAME_NTH(3), BTF_INT_SIGNED, 0, 32, 4),
6973 BTF_TYPE_INT_ENC(NAME_NTH(4), BTF_INT_SIGNED, 0, 64, 8),
6974 BTF_TYPE_INT_ENC(NAME_NTH(5), BTF_INT_SIGNED, 0, 32, 4),
6981 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4),
6982 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 64, 8),
7001 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7003 BTF_TYPE_ARRAY_ENC(1, 1, 16), /* [2] */
7005 BTF_STRUCT_ENC(NAME_NTH(2), 5, 88), /* [3] */
7006 BTF_MEMBER_ENC(NAME_NTH(3), 4, 0), /* struct s *next; */
7007 BTF_MEMBER_ENC(NAME_NTH(4), 5, 64), /* const int *a; */
7008 BTF_MEMBER_ENC(NAME_NTH(5), 2, 128), /* int b[16]; */
7011 /* ptr -> [3] struct s */
7012 BTF_PTR_ENC(3), /* [4] */
7013 /* ptr -> [6] const int */
7015 /* const -> [1] int */
7017 /* tag -> [3] struct s */
7018 BTF_DECL_TAG_ENC(NAME_NTH(2), 3, -1), /* [7] */
7019 /* tag -> [3] struct s, member 1 */
7020 BTF_DECL_TAG_ENC(NAME_NTH(2), 3, 1), /* [8] */
7023 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4), /* [9] */
7025 BTF_STRUCT_ENC(NAME_NTH(2), 5, 88), /* [11] */
7027 BTF_MEMBER_ENC(NAME_NTH(4), 13, 64),
7034 BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [15] */
7035 BTF_DECL_TAG_ENC(NAME_NTH(2), 11, -1), /* [16] */
7036 BTF_DECL_TAG_ENC(NAME_NTH(2), 11, 1), /* [17] */
7044 BTF_TYPE_INT_ENC(NAME_NTH(5), BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7046 BTF_TYPE_ARRAY_ENC(1, 1, 16), /* [2] */
7049 BTF_MEMBER_ENC(NAME_NTH(7), 4, 0), /* struct s *next; */
7051 BTF_MEMBER_ENC(NAME_NTH(2), 2, 128), /* int b[16]; */
7053 BTF_MEMBER_ENC(NAME_NTH(4), 9, 672), /* float d; */
7054 /* ptr -> [3] struct s */
7055 BTF_PTR_ENC(3), /* [4] */
7056 /* ptr -> [6] const int */
7058 /* const -> [1] int */
7060 BTF_DECL_TAG_ENC(NAME_NTH(2), 3, -1), /* [7] */
7061 BTF_DECL_TAG_ENC(NAME_NTH(2), 3, 1), /* [8] */
7062 BTF_TYPE_FLOAT_ENC(NAME_NTH(7), 4), /* [9] */
7069 .descr = "dedup: struct <-> fwd resolution w/ hash collision",
7076 * // CU 2:
7086 BTF_PTR_ENC(1), /* [2] ptr -> [1] */
7088 BTF_MEMBER_ENC(NAME_TBD, 2, 0),
7089 /* CU 2 */
7090 BTF_STRUCT_ENC(NAME_TBD, 0, 0), /* [4] struct x */
7091 BTF_PTR_ENC(4), /* [5] ptr -> [4] */
7100 BTF_PTR_ENC(3), /* [1] ptr -> [3] */
7101 BTF_STRUCT_ENC(NAME_TBD, 1, 8), /* [2] struct s */
7103 BTF_STRUCT_ENC(NAME_NTH(2), 0, 0), /* [3] struct x */
7119 * // CU 2:
7128 BTF_PTR_ENC(1), /* [2] ptr -> [1] */
7130 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7131 /* CU 2 */
7132 BTF_PTR_ENC(0), /* [4] ptr -> void */
7134 BTF_MEMBER_ENC(NAME_NTH(2), 4, 0),
7143 BTF_PTR_ENC(1), /* [2] ptr -> [1] */
7145 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7146 /* CU 2 */
7147 BTF_PTR_ENC(0), /* [4] ptr -> void */
7149 BTF_MEMBER_ENC(NAME_NTH(2), 4, 0),
7163 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 4), /* [2] enum */
7167 BTF_TYPE_ARRAY_ENC(2, 1, 7), /* [4] array */
7168 BTF_STRUCT_ENC(NAME_TBD, 1, 4), /* [5] struct */
7170 BTF_UNION_ENC(NAME_TBD, 1, 4), /* [6] union */
7177 BTF_FUNC_PROTO_ENC(1, 2), /* [12] func_proto */
7181 BTF_TYPE_FLOAT_ENC(NAME_TBD, 2), /* [14] float */
7182 BTF_DECL_TAG_ENC(NAME_TBD, 13, -1), /* [15] decl_tag */
7184 BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
7186 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 2), 8), /* [19] enum64 */
7196 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM, 0, 2), 4), /* [2] enum */
7200 BTF_TYPE_ARRAY_ENC(2, 1, 7), /* [4] array */
7201 BTF_STRUCT_ENC(NAME_TBD, 1, 4), /* [5] struct */
7203 BTF_UNION_ENC(NAME_TBD, 1, 4), /* [6] union */
7210 BTF_FUNC_PROTO_ENC(1, 2), /* [12] func_proto */
7214 BTF_TYPE_FLOAT_ENC(NAME_TBD, 2), /* [14] float */
7215 BTF_DECL_TAG_ENC(NAME_TBD, 13, -1), /* [15] decl_tag */
7217 BTF_DECL_TAG_ENC(NAME_TBD, 7, -1), /* [17] decl_tag */
7219 BTF_TYPE_ENC(NAME_TBD, BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 2), 8), /* [19] enum64 */
7233 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 32, 8),
7242 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4),
7244 BTF_TYPE_FLOAT_ENC(NAME_NTH(3), 2),
7245 BTF_TYPE_FLOAT_ENC(NAME_NTH(3), 4),
7257 BTF_TYPE_INT_ENC(NAME_NTH(2), BTF_INT_SIGNED, 0, 32, 8),
7266 BTF_TYPE_INT_ENC(NAME_NTH(1), BTF_INT_SIGNED, 0, 32, 4),
7268 BTF_TYPE_FLOAT_ENC(NAME_NTH(3), 2),
7269 BTF_TYPE_FLOAT_ENC(NAME_NTH(3), 4),
7283 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
7284 /* [2] full enum 'e1' after fwd */
7285 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7286 BTF_ENUM_ENC(NAME_NTH(2), 123),
7288 BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7289 BTF_ENUM_ENC(NAME_NTH(4), 456),
7290 /* [4] fwd enum 'e2' after full enum */
7291 BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
7295 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7296 BTF_ENUM_ENC(NAME_NTH(2), 321),
7304 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7305 BTF_ENUM_ENC(NAME_NTH(2), 123),
7306 /* [2] full enum 'e2' */
7307 BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7308 BTF_ENUM_ENC(NAME_NTH(4), 456),
7310 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7311 BTF_ENUM_ENC(NAME_NTH(2), 321),
7318 .descr = "dedup: datasec and vars pass-through",
7322 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7324 BTF_VAR_ENC(NAME_NTH(2), 1, 0), /* [2] */
7326 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
7327 BTF_VAR_SECINFO_ENC(2, 0, 4),
7329 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [4] */
7331 BTF_VAR_ENC(NAME_NTH(2), 4, 0), /* [5] */
7333 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
7334 BTF_VAR_SECINFO_ENC(5, 0, 4),
7342 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7344 BTF_VAR_ENC(NAME_NTH(2), 1, 0), /* [2] */
7346 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
7347 BTF_VAR_SECINFO_ENC(2, 0, 4),
7349 BTF_VAR_ENC(NAME_NTH(2), 1, 0), /* [4] */
7351 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_DATASEC, 0, 1), 4),
7352 BTF_VAR_SECINFO_ENC(4, 0, 4),
7366 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7368 BTF_VAR_ENC(NAME_NTH(1), 1, 0), /* [2] */
7370 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
7371 BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7373 BTF_FUNC_ENC(NAME_NTH(4), 3), /* [4] */
7374 /* tag -> t */
7375 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7376 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, -1), /* [6] */
7377 /* tag -> func */
7378 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, -1), /* [7] */
7379 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, -1), /* [8] */
7380 /* tag -> func arg a1 */
7381 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, 1), /* [9] */
7382 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, 1), /* [10] */
7389 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7390 BTF_VAR_ENC(NAME_NTH(1), 1, 0), /* [2] */
7391 BTF_FUNC_PROTO_ENC(0, 2), /* [3] */
7392 BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7394 BTF_FUNC_ENC(NAME_NTH(4), 3), /* [4] */
7395 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7396 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, -1), /* [6] */
7397 BTF_DECL_TAG_ENC(NAME_NTH(5), 4, 1), /* [7] */
7408 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7410 BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
7412 BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7413 BTF_FUNC_ENC(NAME_NTH(3), 2), /* [3] */
7415 BTF_FUNC_PROTO_ENC(0, 2), /* [4] */
7417 BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7418 BTF_FUNC_ENC(NAME_NTH(3), 4), /* [5] */
7419 /* tag -> f: tag1, tag2 */
7420 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, -1), /* [6] */
7421 BTF_DECL_TAG_ENC(NAME_NTH(5), 3, -1), /* [7] */
7422 /* tag -> f/a2: tag1, tag2 */
7423 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, 1), /* [8] */
7425 /* tag -> f: tag1, tag3 */
7426 BTF_DECL_TAG_ENC(NAME_NTH(4), 5, -1), /* [10] */
7427 BTF_DECL_TAG_ENC(NAME_NTH(6), 5, -1), /* [11] */
7428 /* tag -> f/a2: tag1, tag3 */
7429 BTF_DECL_TAG_ENC(NAME_NTH(4), 5, 1), /* [12] */
7437 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7438 BTF_FUNC_PROTO_ENC(0, 2), /* [2] */
7440 BTF_FUNC_PROTO_ARG_ENC(NAME_NTH(2), 1),
7441 BTF_FUNC_ENC(NAME_NTH(3), 2), /* [3] */
7442 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, -1), /* [4] */
7443 BTF_DECL_TAG_ENC(NAME_NTH(5), 3, -1), /* [5] */
7444 BTF_DECL_TAG_ENC(NAME_NTH(6), 3, -1), /* [6] */
7445 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, 1), /* [7] */
7458 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7459 BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [2] */
7460 BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7462 BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [3] */
7463 BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7465 /* tag -> t: tag1, tag2 */
7466 BTF_DECL_TAG_ENC(NAME_NTH(4), 2, -1), /* [4] */
7467 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, -1), /* [5] */
7468 /* tag -> t/m2: tag1, tag2 */
7469 BTF_DECL_TAG_ENC(NAME_NTH(4), 2, 1), /* [6] */
7470 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, 1), /* [7] */
7471 /* tag -> t: tag1, tag3 */
7472 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, -1), /* [8] */
7473 BTF_DECL_TAG_ENC(NAME_NTH(6), 3, -1), /* [9] */
7474 /* tag -> t/m2: tag1, tag3 */
7475 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, 1), /* [10] */
7483 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7484 BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [2] */
7485 BTF_MEMBER_ENC(NAME_NTH(2), 1, 0),
7487 BTF_DECL_TAG_ENC(NAME_NTH(4), 2, -1), /* [3] */
7488 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, -1), /* [4] */
7489 BTF_DECL_TAG_ENC(NAME_NTH(6), 2, -1), /* [5] */
7490 BTF_DECL_TAG_ENC(NAME_NTH(4), 2, 1), /* [6] */
7491 BTF_DECL_TAG_ENC(NAME_NTH(5), 2, 1), /* [7] */
7492 BTF_DECL_TAG_ENC(NAME_NTH(6), 2, 1), /* [8] */
7503 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7504 BTF_TYPEDEF_ENC(NAME_NTH(1), 1), /* [2] */
7506 /* tag -> t: tag1, tag2 */
7507 BTF_DECL_TAG_ENC(NAME_NTH(2), 2, -1), /* [4] */
7508 BTF_DECL_TAG_ENC(NAME_NTH(3), 2, -1), /* [5] */
7509 /* tag -> t: tag1, tag3 */
7510 BTF_DECL_TAG_ENC(NAME_NTH(2), 3, -1), /* [6] */
7511 BTF_DECL_TAG_ENC(NAME_NTH(4), 3, -1), /* [7] */
7518 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7519 BTF_TYPEDEF_ENC(NAME_NTH(1), 1), /* [2] */
7520 BTF_DECL_TAG_ENC(NAME_NTH(2), 2, -1), /* [3] */
7521 BTF_DECL_TAG_ENC(NAME_NTH(3), 2, -1), /* [4] */
7522 BTF_DECL_TAG_ENC(NAME_NTH(4), 2, -1), /* [5] */
7532 /* ptr -> tag2 -> tag1 -> int */
7533 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7534 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7535 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7536 BTF_PTR_ENC(3), /* [4] */
7537 /* ptr -> tag2 -> tag1 -> int */
7539 BTF_TYPE_TAG_ENC(NAME_NTH(2), 5), /* [6] */
7541 /* ptr -> tag1 -> int */
7550 /* ptr -> tag2 -> tag1 -> int */
7551 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7552 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7553 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7554 BTF_PTR_ENC(3), /* [4] */
7555 /* ptr -> tag1 -> int */
7556 BTF_PTR_ENC(2), /* [5] */
7563 .descr = "dedup: btf_type_tag #2",
7566 /* ptr -> tag2 -> tag1 -> int */
7567 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7568 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7569 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7570 BTF_PTR_ENC(3), /* [4] */
7571 /* ptr -> tag2 -> int */
7572 BTF_TYPE_TAG_ENC(NAME_NTH(2), 1), /* [5] */
7580 /* ptr -> tag2 -> tag1 -> int */
7581 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7582 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7583 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7584 BTF_PTR_ENC(3), /* [4] */
7585 /* ptr -> tag2 -> int */
7586 BTF_TYPE_TAG_ENC(NAME_NTH(2), 1), /* [5] */
7597 /* ptr -> tag2 -> tag1 -> int */
7598 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7599 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7600 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7601 BTF_PTR_ENC(3), /* [4] */
7602 /* ptr -> tag1 -> tag2 -> int */
7603 BTF_TYPE_TAG_ENC(NAME_NTH(2), 1), /* [5] */
7612 /* ptr -> tag2 -> tag1 -> int */
7613 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7614 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7615 BTF_TYPE_TAG_ENC(NAME_NTH(2), 2), /* [3] */
7616 BTF_PTR_ENC(3), /* [4] */
7617 /* ptr -> tag1 -> tag2 -> int */
7618 BTF_TYPE_TAG_ENC(NAME_NTH(2), 1), /* [5] */
7627 .descr = "dedup: btf_type_tag #4",
7630 /* ptr -> tag1 -> int */
7631 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7632 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7633 BTF_PTR_ENC(2), /* [3] */
7634 /* ptr -> tag1 -> long */
7635 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 64, 8), /* [4] */
7636 BTF_TYPE_TAG_ENC(NAME_NTH(1), 4), /* [5] */
7644 /* ptr -> tag1 -> int */
7645 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7646 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7647 BTF_PTR_ENC(2), /* [3] */
7648 /* ptr -> tag1 -> long */
7649 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 64, 8), /* [4] */
7650 BTF_TYPE_TAG_ENC(NAME_NTH(1), 4), /* [5] */
7661 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7662 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7663 BTF_TYPE_ENC(NAME_NTH(2), BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 1), 4), /* [3] */
7664 BTF_MEMBER_ENC(NAME_NTH(3), 2, BTF_MEMBER_OFFSET(0, 0)),
7665 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [4] */
7666 BTF_TYPE_ENC(NAME_NTH(2), BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 1), 4), /* [5] */
7667 BTF_MEMBER_ENC(NAME_NTH(3), 4, BTF_MEMBER_OFFSET(0, 0)),
7674 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [1] */
7675 BTF_TYPE_TAG_ENC(NAME_NTH(1), 1), /* [2] */
7676 BTF_TYPE_ENC(NAME_NTH(2), BTF_INFO_ENC(BTF_KIND_STRUCT, 1, 1), 4), /* [3] */
7677 BTF_MEMBER_ENC(NAME_NTH(3), 2, BTF_MEMBER_OFFSET(0, 0)),
7688 BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
7690 BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
7698 BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
7710 /* [2] full enum64 'e1' after fwd */
7712 BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
7715 BTF_ENUM64_ENC(NAME_NTH(4), 0, 456),
7716 /* [4] fwd enum64 'e2' after full enum */
7720 BTF_ENUM64_ENC(NAME_NTH(2), 0, 321),
7729 BTF_ENUM64_ENC(NAME_NTH(2), 1, 123),
7730 /* [2] full enum64 'e2' */
7732 BTF_ENUM64_ENC(NAME_NTH(4), 0, 456),
7735 BTF_ENUM64_ENC(NAME_NTH(2), 0, 321),
7746 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7747 BTF_ENUM_ENC(NAME_NTH(2), 1),
7748 /* [2] enum64 'e1' */
7749 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 4),
7750 BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
7758 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7759 BTF_ENUM_ENC(NAME_NTH(2), 1),
7760 /* [2] enum64 'e1' */
7761 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM64, 0, 1), 4),
7762 BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
7773 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7774 BTF_ENUM_ENC(NAME_NTH(2), 1),
7775 /* [2] enum 'e1' */
7776 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 2),
7777 BTF_ENUM_ENC(NAME_NTH(2), 1),
7785 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7786 BTF_ENUM_ENC(NAME_NTH(2), 1),
7787 /* [2] enum 'e1' */
7788 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 2),
7789 BTF_ENUM_ENC(NAME_NTH(2), 1),
7801 BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
7802 /* [2] enum 'e1' fwd */
7803 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 0), 4),
7805 BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 2),
7814 BTF_ENUM64_ENC(NAME_NTH(2), 1, 0),
7815 /* [2] typedef enum 'e1' td */
7827 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7828 BTF_ENUM_ENC(NAME_NTH(2), 1),
7829 /* [2] enum64 'e1' fwd */
7832 BTF_TYPE_ENC(NAME_NTH(3), BTF_INFO_ENC(BTF_KIND_TYPEDEF, 0, 0), 2),
7840 BTF_TYPE_ENC(NAME_NTH(1), BTF_INFO_ENC(BTF_KIND_ENUM, 0, 1), 4),
7841 BTF_ENUM_ENC(NAME_NTH(2), 1),
7842 /* [2] typedef enum 'e1' td */
7858 * // CU 2:
7865 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
7866 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7867 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7868 /* CU 2 */
7870 BTF_PTR_ENC(3), /* [4] */
7871 BTF_TYPEDEF_ENC(NAME_NTH(3), 4), /* [5] */
7878 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
7879 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7880 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7882 BTF_TYPEDEF_ENC(NAME_NTH(3), 3), /* [4] */
7898 * // CU 2:
7905 BTF_UNION_ENC(NAME_NTH(1), 1, 4), /* [1] */
7906 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7907 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7908 /* CU 2 */
7910 BTF_PTR_ENC(3), /* [4] */
7911 BTF_TYPEDEF_ENC(NAME_NTH(3), 4), /* [5] */
7918 BTF_UNION_ENC(NAME_NTH(1), 1, 4), /* [1] */
7919 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7920 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7922 BTF_TYPEDEF_ENC(NAME_NTH(3), 3), /* [4] */
7932 * - CU1:foo is a struct, C2:foo is a union, thus CU2:foo is not deduped;
7933 * - typedef/ptr should remain unchanged as well.
7938 * // CU 2:
7945 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
7946 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7947 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7948 /* CU 2 */
7950 BTF_PTR_ENC(3), /* [4] */
7951 BTF_TYPEDEF_ENC(NAME_NTH(3), 4), /* [5] */
7959 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
7960 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7961 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7962 /* CU 2 */
7964 BTF_PTR_ENC(3), /* [4] */
7965 BTF_TYPEDEF_ENC(NAME_NTH(3), 4), /* [5] */
7975 * - two candidates for CU2:foo dedup, thus it is unchanged;
7976 * - typedef/ptr should remain unchanged as well.
7981 * // CU 2:
7991 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
7992 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
7993 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
7994 /* CU 2 */
7996 BTF_PTR_ENC(3), /* [4] */
7997 BTF_TYPEDEF_ENC(NAME_NTH(4), 4), /* [5] */
7999 BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [6] */
8000 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
8001 BTF_MEMBER_ENC(NAME_NTH(3), 2, 0),
8009 BTF_STRUCT_ENC(NAME_NTH(1), 1, 4), /* [1] */
8010 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
8011 BTF_TYPE_INT_ENC(0, BTF_INT_SIGNED, 0, 32, 4), /* [2] */
8012 /* CU 2 */
8014 BTF_PTR_ENC(3), /* [4] */
8015 BTF_TYPEDEF_ENC(NAME_NTH(4), 4), /* [5] */
8017 BTF_STRUCT_ENC(NAME_NTH(1), 2, 8), /* [6] */
8018 BTF_MEMBER_ENC(NAME_NTH(2), 2, 0),
8019 BTF_MEMBER_ENC(NAME_NTH(3), 2, 0),
8030 __u16 vlen = BTF_INFO_VLEN(t->info);
8031 __u16 kind = BTF_INFO_KIND(t->info);
8065 return -EINVAL;
8083 struct btf_dedup_test *test = &dedup_tests[test_num - 1];
8096 if (!test__start_subtest(test->descr))
8099 raw_btf = btf_raw_create(&hdr_tmpl, test->input.raw_types,
8100 test->input.str_sec, test->input.str_sec_size,
8109 err = -1;
8113 raw_btf = btf_raw_create(&hdr_tmpl, test->expect.raw_types,
8114 test->expect.str_sec,
8115 test->expect.str_sec_size,
8123 err = -1;
8127 test->opts.sz = sizeof(test->opts);
8128 err = btf__dedup(test_btf, &test->opts);
8130 err = -1;
8139 err = -1;
8144 test_strs = test_btf_data + sizeof(*test_hdr) + test_hdr->str_off;
8146 expect_strs = expect_btf_data + sizeof(*test_hdr) + expect_hdr->str_off;
8147 if (CHECK(test_hdr->str_len != expect_hdr->str_len,
8148 "test_hdr->str_len:%u != expect_hdr->str_len:%u",
8149 test_hdr->str_len, expect_hdr->str_len)) {
8151 dump_btf_strings(test_strs, test_hdr->str_len);
8153 dump_btf_strings(expect_strs, expect_hdr->str_len);
8154 err = -1;
8159 expect_str_end = expect_strs + expect_hdr->str_len;
8166 err = -1;
8177 err = -1;
8183 err = -1;
8194 err = -1;
8210 err = -1;
8216 err = -1;
8219 if (CHECK(test_type->info != expect_type->info,
8221 i, expect_type->info, test_type->info)) {
8222 err = -1;
8225 if (CHECK(test_type->size != expect_type->size,
8227 i, expect_type->size, test_type->size)) {
8228 err = -1;