4 void preserce_ptr_sz_fn(long x) {}
6 #define __bpf_aligned __attribute__((aligned(8)))
12 struct core_reloc_kernel_output {
14 char comm[sizeof("test_progs")];
22 struct core_reloc_module_output {
30 /* we have test_progs[-flavor], so cut flavor part */
31 char comm[sizeof("test_progs")];
38 struct core_reloc_flavors {
44 /* this is not a flavor, as it doesn't have triple underscore */
45 struct core_reloc_flavors__err_wrong_name {
54 /* original set up, used to record relocations in BPF program */
55 struct core_reloc_nesting_substruct {
59 union core_reloc_nesting_subunion {
63 struct core_reloc_nesting {
65 struct core_reloc_nesting_substruct a;
68 union core_reloc_nesting_subunion b;
72 /* inlined anonymous struct/union instead of named structs in original */
73 struct core_reloc_nesting___anon_embed {
74 int __just_for_padding;
87 /* different mix of nested structs/unions than in original */
88 struct core_reloc_nesting___struct_union_mixup {
107 /* extra anon structs/unions, but still valid a.a.a and b.b.b accessors */
108 struct core_reloc_nesting___extra_nesting {
135 /* three flavors of same struct with different structure but same layout for
136 * a.a.a and b.b.b, thus successfully resolved and relocatable */
137 struct core_reloc_nesting___dup_compat_types {
138 char __just_for_padding;
139 /* 3 more bytes of padding */
142 int a; /* offset 4 */
145 long long __more_padding;
148 int b; /* offset 16 */
153 struct core_reloc_nesting___dup_compat_types__2 {
154 int __aligned_padding;
156 int __trickier_noop[0];
158 char __some_more_noops[0];
159 int a; /* offset 4 */
166 int __critical_padding;
167 int b; /* offset 16 */
169 int __does_not_matter;
172 int __more_irrelevant_stuff;
175 struct core_reloc_nesting___dup_compat_types__3 {
176 char __correct_padding[4];
179 int a; /* offset 4 */
182 /* 8 byte padding due to next struct's alignment */
187 } b __attribute__((aligned(16)));
190 /* b.b.b field is missing */
191 struct core_reloc_nesting___err_missing_field {
204 /* b.b.b field is an array of integers instead of plain int */
205 struct core_reloc_nesting___err_array_field {
218 /* middle b container is missing */
219 struct core_reloc_nesting___err_missing_container {
230 /* middle b container is referenced through pointer instead of being embedded */
231 struct core_reloc_nesting___err_nonstruct_container {
244 /* middle b container is an array of structs instead of plain struct */
245 struct core_reloc_nesting___err_array_container {
258 /* two flavors of same struct with incompatible layout for b.b.b */
259 struct core_reloc_nesting___err_dup_incompat_types__1 {
262 int a; /* offset 0 */
267 int b; /* offset 4 */
272 struct core_reloc_nesting___err_dup_incompat_types__2 {
275 int a; /* offset 0 */
281 int b; /* offset 8 (!) */
286 /* two flavors of same struct having one of a.a.a and b.b.b, but not both */
287 struct core_reloc_nesting___err_partial_match_dups__a {
295 struct core_reloc_nesting___err_partial_match_dups__b {
303 struct core_reloc_nesting___err_too_deep {
309 /* 65 levels of nestedness for b.b.b */
312 struct { struct { struct { struct { struct {
313 struct { struct { struct { struct { struct {
314 struct { struct { struct { struct { struct {
315 struct { struct { struct { struct { struct {
316 struct { struct { struct { struct { struct {
317 struct { struct { struct { struct { struct {
318 struct { struct { struct { struct { struct {
319 struct { struct { struct { struct { struct {
320 struct { struct { struct { struct { struct {
321 struct { struct { struct { struct { struct {
322 struct { struct { struct { struct { struct {
323 struct { struct { struct { struct { struct {
324 /* this one is one too much */
347 struct core_reloc_arrays_output {
355 struct core_reloc_arrays_substruct {
360 struct core_reloc_arrays {
363 struct core_reloc_arrays_substruct c[3];
364 struct core_reloc_arrays_substruct d[1][2];
365 struct core_reloc_arrays_substruct f[][2];
368 /* bigger array dimensions */
369 struct core_reloc_arrays___diff_arr_dim {
372 struct core_reloc_arrays_substruct c[4];
373 struct core_reloc_arrays_substruct d[2][3];
374 struct core_reloc_arrays_substruct f[1][3];
377 /* different size of array's value (struct) */
378 struct core_reloc_arrays___diff_arr_val_sz {
398 struct core_reloc_arrays___equiv_zero_sz_arr {
401 struct core_reloc_arrays_substruct c[3];
402 struct core_reloc_arrays_substruct d[1][2];
403 /* equivalent to flexible array */
404 struct core_reloc_arrays_substruct f[][2];
407 struct core_reloc_arrays___fixed_arr {
410 struct core_reloc_arrays_substruct c[3];
411 struct core_reloc_arrays_substruct d[1][2];
412 /* not a flexible array anymore, but within access bounds */
413 struct core_reloc_arrays_substruct f[1][2];
416 struct core_reloc_arrays___err_too_small {
417 int a[2]; /* this one is too small */
419 struct core_reloc_arrays_substruct c[3];
420 struct core_reloc_arrays_substruct d[1][2];
421 struct core_reloc_arrays_substruct f[][2];
424 struct core_reloc_arrays___err_too_shallow {
426 char b[2][3]; /* this one lacks one dimension */
427 struct core_reloc_arrays_substruct c[3];
428 struct core_reloc_arrays_substruct d[1][2];
429 struct core_reloc_arrays_substruct f[][2];
432 struct core_reloc_arrays___err_non_array {
433 int a; /* not an array */
435 struct core_reloc_arrays_substruct c[3];
436 struct core_reloc_arrays_substruct d[1][2];
437 struct core_reloc_arrays_substruct f[][2];
440 struct core_reloc_arrays___err_wrong_val_type {
443 int c[3]; /* value is not a struct */
444 struct core_reloc_arrays_substruct d[1][2];
445 struct core_reloc_arrays_substruct f[][2];
448 struct core_reloc_arrays___err_bad_zero_sz_arr {
449 /* zero-sized array, but not at the end */
450 struct core_reloc_arrays_substruct f[0][2];
453 struct core_reloc_arrays_substruct c[3];
454 struct core_reloc_arrays_substruct d[1][2];
460 enum core_reloc_primitives_enum {
465 struct core_reloc_primitives {
468 enum core_reloc_primitives_enum c;
469 void *d __bpf_aligned;
470 int (*f)(const char *) __bpf_aligned;
473 struct core_reloc_primitives___diff_enum_def {
476 void *d __bpf_aligned;
477 int (*f)(const char *) __bpf_aligned;
481 } c __bpf_aligned; /* inline enum def with differing set of values */
484 struct core_reloc_primitives___diff_func_proto {
485 void (*f)(int) __bpf_aligned; /* incompatible function prototype */
486 void *d __bpf_aligned;
487 enum core_reloc_primitives_enum c __bpf_aligned;
492 struct core_reloc_primitives___diff_ptr_type {
493 const char * const d __bpf_aligned; /* different pointee type + modifiers */
494 char a __bpf_aligned;
496 enum core_reloc_primitives_enum c;
497 int (*f)(const char *) __bpf_aligned;
500 struct core_reloc_primitives___err_non_enum {
503 int c; /* int instead of enum */
504 void *d __bpf_aligned;
505 int (*f)(const char *) __bpf_aligned;
508 struct core_reloc_primitives___err_non_int {
510 int *b __bpf_aligned; /* ptr instead of int */
511 enum core_reloc_primitives_enum c __bpf_aligned;
512 void *d __bpf_aligned;
513 int (*f)(const char *) __bpf_aligned;
516 struct core_reloc_primitives___err_non_ptr {
519 enum core_reloc_primitives_enum c;
520 int d; /* int instead of ptr */
521 int (*f)(const char *) __bpf_aligned;
527 struct core_reloc_mods_output {
528 int a, b, c, d, e, f, g, h;
531 typedef const int int_t;
532 typedef const char *char_ptr_t __bpf_aligned;
533 typedef const int arr_t[7];
535 struct core_reloc_mods_substruct {
543 } core_reloc_mods_substruct_t;
545 struct core_reloc_mods {
548 char *c __bpf_aligned;
550 int e[3] __bpf_aligned;
552 struct core_reloc_mods_substruct g;
553 core_reloc_mods_substruct_t h;
556 /* a/b, c/d, e/f, and g/h pairs are swapped */
557 struct core_reloc_mods___mod_swap {
560 char *d __bpf_aligned;
562 int f[3] __bpf_aligned;
568 core_reloc_mods_substruct_t g;
572 typedef int1_t int2_t;
573 typedef int2_t int3_t;
575 typedef int arr1_t[5];
576 typedef arr1_t arr2_t;
577 typedef arr2_t arr3_t;
578 typedef arr3_t arr4_t;
580 typedef const char * const volatile fancy_char_ptr_t __bpf_aligned;
582 typedef core_reloc_mods_substruct_t core_reloc_mods_substruct_tt;
584 /* we need more typedefs */
585 struct core_reloc_mods___typedefs {
586 core_reloc_mods_substruct_tt g;
587 core_reloc_mods_substruct_tt h;
592 int3_t b __bpf_aligned;
599 struct core_reloc_ptr_as_arr {
603 struct core_reloc_ptr_as_arr___diff_sz {
604 int :32; /* padding */
605 char __some_more_padding;
612 struct core_reloc_ints {
623 /* signed/unsigned types swap */
624 struct core_reloc_ints___reverse_sign {
635 struct core_reloc_ints___bool {
636 bool u8_field; /* bool instead of uint8 */
649 struct core_reloc_misc_output {
653 struct core_reloc_misc___a {
658 struct core_reloc_misc___b {
663 /* this one extends core_reloc_misc_extensible struct from BPF prog */
664 struct core_reloc_misc_extensible {
674 struct core_reloc_existence_output {
687 struct core_reloc_existence {
699 struct core_reloc_existence___minimal {
703 struct core_reloc_existence___wrong_field_defs {
714 /* bitfield read results, all as plain integers */
715 struct core_reloc_bitfields_output {
725 struct core_reloc_bitfields {
726 /* unsigned bitfields */
730 /* signed bitfields */
738 /* different bit sizes (both up and down) */
739 struct core_reloc_bitfields___bit_sz_change {
740 /* unsigned bitfields */
741 uint16_t ub1: 3; /* 1 -> 3 */
742 uint32_t ub2: 20; /* 2 -> 20 */
743 uint8_t ub7: 1; /* 7 -> 1 */
744 /* signed bitfields */
745 int8_t sb4: 1; /* 4 -> 1 */
746 int32_t sb20: 30; /* 20 -> 30 */
748 uint16_t u32; /* 32 -> 16 */
749 int64_t s32 __bpf_aligned; /* 32 -> 64 */
752 /* turn bitfield into non-bitfield and vice versa */
753 struct core_reloc_bitfields___bitfield_vs_int {
754 uint64_t ub1; /* 3 -> 64 non-bitfield */
755 uint8_t ub2; /* 20 -> 8 non-bitfield */
756 int64_t ub7 __bpf_aligned; /* 7 -> 64 non-bitfield signed */
757 int64_t sb4 __bpf_aligned; /* 4 -> 64 non-bitfield signed */
758 uint64_t sb20 __bpf_aligned; /* 20 -> 16 non-bitfield unsigned */
759 int32_t u32: 20; /* 32 non-bitfield -> 20 bitfield */
760 uint64_t s32: 60 __bpf_aligned; /* 32 non-bitfield -> 60 bitfield */
763 struct core_reloc_bitfields___just_big_enough {
765 uint64_t ub2: 60; /* packed tightly */
771 } __attribute__((packed)) ;
773 struct core_reloc_bitfields___err_too_big_bitfield {
775 uint64_t ub2: 61; /* packed tightly */
781 } __attribute__((packed)) ;
786 struct core_reloc_size_output {
805 struct core_reloc_size {
807 struct { int x; } struct_field;
808 union { int x; } union_field;
811 enum { VALUE = 123 } enum_field;
815 struct core_reloc_size___diff_sz {
817 struct { int x; int y; int z; } struct_field;
818 union { int x; char bla[123]; } union_field;
821 enum { OTHER_VALUE = 0xFFFFFFFFFFFFFFFF } enum_field;
825 struct core_reloc_size___diff_offs {
827 enum { YET_OTHER_VALUE = 123 } enum_field;
830 union { int x; } union_field;
831 struct { int x; } struct_field;
835 /* Error case of two candidates with the fields (int_field) at the same
836 * offset, but with differing final relocation values: size 4 vs size 1
838 struct core_reloc_size___err_ambiguous1 {
839 /* int at offset 0 */
842 struct { int x; } struct_field;
843 union { int x; } union_field;
846 enum { VALUE___1 = 123 } enum_field;
850 struct core_reloc_size___err_ambiguous2 {
851 /* char at offset 0 */
854 struct { int x; } struct_field;
855 union { int x; } union_field;
858 enum { VALUE___2 = 123 } enum_field;
863 * TYPE EXISTENCE, MATCH & SIZE
865 struct core_reloc_type_based_output {
869 bool typedef_named_struct_exists;
870 bool typedef_anon_struct_exists;
871 bool typedef_struct_ptr_exists;
872 bool typedef_int_exists;
873 bool typedef_enum_exists;
874 bool typedef_void_ptr_exists;
875 bool typedef_func_proto_exists;
876 bool typedef_arr_exists;
881 bool typedef_named_struct_matches;
882 bool typedef_anon_struct_matches;
883 bool typedef_struct_ptr_matches;
884 bool typedef_int_matches;
885 bool typedef_enum_matches;
886 bool typedef_void_ptr_matches;
887 bool typedef_func_proto_matches;
888 bool typedef_arr_matches;
893 int typedef_named_struct_sz;
894 int typedef_anon_struct_sz;
895 int typedef_struct_ptr_sz;
898 int typedef_void_ptr_sz;
899 int typedef_func_proto_sz;
912 typedef struct a_struct named_struct_typedef;
914 typedef struct { int x, y, z; } anon_struct_typedef;
918 } *struct_ptr_typedef;
926 typedef int int_typedef;
928 typedef enum { TYPEDEF_ENUM_VAL1, TYPEDEF_ENUM_VAL2 } enum_typedef;
930 typedef void *void_ptr_typedef;
932 typedef int (*func_proto_typedef)(long);
934 typedef char arr_typedef[20];
936 struct core_reloc_type_based {
940 named_struct_typedef f4;
941 anon_struct_typedef f5;
942 struct_ptr_typedef f6;
946 func_proto_typedef f10;
950 /* no types in target */
951 struct core_reloc_type_based___all_missing {
954 /* different member orders, enum variant values, signedness, etc */
955 struct a_struct___diff {
960 union a_union___diff {
965 typedef struct a_struct___diff named_struct_typedef___diff;
967 typedef struct { int z, x, y; } anon_struct_typedef___diff;
973 } *struct_ptr_typedef___diff;
975 enum an_enum___diff {
976 AN_ENUM_VAL2___diff = 0,
977 AN_ENUM_VAL1___diff = 42,
978 AN_ENUM_VAL3___diff = 1,
981 typedef unsigned int int_typedef___diff;
983 typedef enum { TYPEDEF_ENUM_VAL2___diff, TYPEDEF_ENUM_VAL1___diff = 50 } enum_typedef___diff;
985 typedef const void *void_ptr_typedef___diff;
987 typedef int_typedef___diff (*func_proto_typedef___diff)(long);
989 typedef char arr_typedef___diff[3];
991 struct core_reloc_type_based___diff {
992 struct a_struct___diff f1;
993 union a_union___diff f2;
994 enum an_enum___diff f3;
995 named_struct_typedef___diff f4;
996 anon_struct_typedef___diff f5;
997 struct_ptr_typedef___diff f6;
998 int_typedef___diff f7;
999 enum_typedef___diff f8;
1000 void_ptr_typedef___diff f9;
1001 func_proto_typedef___diff f10;
1002 arr_typedef___diff f11;
1005 /* different type sizes, extra modifiers, anon vs named enums, etc */
1006 struct a_struct___diff_sz {
1012 union a_union___diff_sz {
1017 typedef struct a_struct___diff_sz named_struct_typedef___diff_sz;
1019 typedef struct { long xx, yy, zzz; } anon_struct_typedef___diff_sz;
1022 char aa[1], bb[2], cc[3];
1023 } *struct_ptr_typedef___diff_sz;
1025 enum an_enum___diff_sz {
1026 AN_ENUM_VAL1___diff_sz = 0x123412341234,
1027 AN_ENUM_VAL2___diff_sz = 2,
1030 typedef unsigned long int_typedef___diff_sz;
1032 typedef enum an_enum___diff_sz enum_typedef___diff_sz;
1034 typedef const void * const void_ptr_typedef___diff_sz;
1036 typedef int_typedef___diff_sz (*func_proto_typedef___diff_sz)(char);
1038 typedef int arr_typedef___diff_sz[2];
1040 struct core_reloc_type_based___diff_sz {
1041 struct a_struct___diff_sz f1;
1042 union a_union___diff_sz f2;
1043 enum an_enum___diff_sz f3;
1044 named_struct_typedef___diff_sz f4;
1045 anon_struct_typedef___diff_sz f5;
1046 struct_ptr_typedef___diff_sz f6;
1047 int_typedef___diff_sz f7;
1048 enum_typedef___diff_sz f8;
1049 void_ptr_typedef___diff_sz f9;
1050 func_proto_typedef___diff_sz f10;
1051 arr_typedef___diff_sz f11;
1054 /* incompatibilities between target and local types */
1055 union a_struct___incompat { /* union instead of struct */
1059 struct a_union___incompat { /* struct instead of union */
1064 /* typedef to union, not to struct */
1065 typedef union a_struct___incompat named_struct_typedef___incompat;
1067 /* typedef to void pointer, instead of struct */
1068 typedef void *anon_struct_typedef___incompat;
1070 /* extra pointer indirection */
1073 } **struct_ptr_typedef___incompat;
1075 /* typedef of a struct with int, instead of int */
1076 typedef struct { int x; } int_typedef___incompat;
1078 /* typedef to func_proto, instead of enum */
1079 typedef int (*enum_typedef___incompat)(void);
1081 /* pointer to char instead of void */
1082 typedef char *void_ptr_typedef___incompat;
1084 /* void return type instead of int */
1085 typedef void (*func_proto_typedef___incompat)(long);
1087 /* multi-dimensional array instead of a single-dimensional */
1088 typedef int arr_typedef___incompat[20][2];
1090 struct core_reloc_type_based___incompat {
1091 union a_struct___incompat f1;
1092 struct a_union___incompat f2;
1093 /* the only valid one is enum, to check that something still succeeds */
1095 named_struct_typedef___incompat f4;
1096 anon_struct_typedef___incompat f5;
1097 struct_ptr_typedef___incompat f6;
1098 int_typedef___incompat f7;
1099 enum_typedef___incompat f8;
1100 void_ptr_typedef___incompat f9;
1101 func_proto_typedef___incompat f10;
1102 arr_typedef___incompat f11;
1105 /* func_proto with incompatible signature */
1106 typedef void (*func_proto_typedef___fn_wrong_ret1)(long);
1107 typedef int * (*func_proto_typedef___fn_wrong_ret2)(long);
1108 typedef struct { int x; } int_struct_typedef;
1109 typedef int_struct_typedef (*func_proto_typedef___fn_wrong_ret3)(long);
1110 typedef int (*func_proto_typedef___fn_wrong_arg)(void *);
1111 typedef int (*func_proto_typedef___fn_wrong_arg_cnt1)(long, long);
1112 typedef int (*func_proto_typedef___fn_wrong_arg_cnt2)(void);
1114 struct core_reloc_type_based___fn_wrong_args {
1115 /* one valid type to make sure relos still work */
1117 func_proto_typedef___fn_wrong_ret1 f2;
1118 func_proto_typedef___fn_wrong_ret2 f3;
1119 func_proto_typedef___fn_wrong_ret3 f4;
1120 func_proto_typedef___fn_wrong_arg f5;
1121 func_proto_typedef___fn_wrong_arg_cnt1 f6;
1122 func_proto_typedef___fn_wrong_arg_cnt2 f7;
1126 * TYPE ID MAPPING (LOCAL AND TARGET)
1128 struct core_reloc_type_id_output {
1129 int local_anon_struct;
1130 int local_anon_union;
1131 int local_anon_enum;
1132 int local_anon_func_proto_ptr;
1133 int local_anon_void_ptr;
1140 int local_struct_typedef;
1141 int local_func_proto_typedef;
1142 int local_arr_typedef;
1148 int targ_struct_typedef;
1149 int targ_func_proto_typedef;
1150 int targ_arr_typedef;
1153 struct core_reloc_type_id {
1157 named_struct_typedef f4;
1158 func_proto_typedef f5;
1162 struct core_reloc_type_id___missing_targets {
1167 * ENUMERATOR VALUE EXISTENCE AND VALUE RELOCATION
1169 struct core_reloc_enumval_output {
1170 bool named_val1_exists;
1171 bool named_val2_exists;
1172 bool named_val3_exists;
1173 bool anon_val1_exists;
1174 bool anon_val2_exists;
1175 bool anon_val3_exists;
1183 struct core_reloc_enum64val_output {
1184 bool unsigned_val1_exists;
1185 bool unsigned_val2_exists;
1186 bool unsigned_val3_exists;
1187 bool signed_val1_exists;
1188 bool signed_val2_exists;
1189 bool signed_val3_exists;
1198 NAMED_ENUM_VAL1 = 1,
1199 NAMED_ENUM_VAL2 = 2,
1200 NAMED_ENUM_VAL3 = 3,
1204 ANON_ENUM_VAL1 = 0x10,
1205 ANON_ENUM_VAL2 = 0x20,
1206 ANON_ENUM_VAL3 = 0x30,
1209 struct core_reloc_enumval {
1214 enum named_unsigned_enum64 {
1215 UNSIGNED_ENUM64_VAL1 = 0x1ffffffffULL,
1216 UNSIGNED_ENUM64_VAL2 = 0x2,
1217 UNSIGNED_ENUM64_VAL3 = 0x3ffffffffULL,
1220 enum named_signed_enum64 {
1221 SIGNED_ENUM64_VAL1 = 0x1ffffffffLL,
1222 SIGNED_ENUM64_VAL2 = -2,
1223 SIGNED_ENUM64_VAL3 = 0x3ffffffffLL,
1226 struct core_reloc_enum64val {
1227 enum named_unsigned_enum64 f1;
1228 enum named_signed_enum64 f2;
1231 /* differing enumerator values */
1232 enum named_enum___diff {
1233 NAMED_ENUM_VAL1___diff = 101,
1234 NAMED_ENUM_VAL2___diff = 202,
1235 NAMED_ENUM_VAL3___diff = 303,
1239 ANON_ENUM_VAL1___diff = 0x11,
1240 ANON_ENUM_VAL2___diff = 0x22,
1241 ANON_ENUM_VAL3___diff = 0x33,
1244 struct core_reloc_enumval___diff {
1245 enum named_enum___diff f1;
1246 anon_enum___diff f2;
1249 enum named_unsigned_enum64___diff {
1250 UNSIGNED_ENUM64_VAL1___diff = 0x101ffffffffULL,
1251 UNSIGNED_ENUM64_VAL2___diff = 0x202ffffffffULL,
1252 UNSIGNED_ENUM64_VAL3___diff = 0x303ffffffffULL,
1255 enum named_signed_enum64___diff {
1256 SIGNED_ENUM64_VAL1___diff = -101,
1257 SIGNED_ENUM64_VAL2___diff = -202,
1258 SIGNED_ENUM64_VAL3___diff = -303,
1261 struct core_reloc_enum64val___diff {
1262 enum named_unsigned_enum64___diff f1;
1263 enum named_signed_enum64___diff f2;
1266 /* missing (optional) third enum value */
1267 enum named_enum___val3_missing {
1268 NAMED_ENUM_VAL1___val3_missing = 111,
1269 NAMED_ENUM_VAL2___val3_missing = 222,
1273 ANON_ENUM_VAL1___val3_missing = 0x111,
1274 ANON_ENUM_VAL2___val3_missing = 0x222,
1275 } anon_enum___val3_missing;
1277 struct core_reloc_enumval___val3_missing {
1278 enum named_enum___val3_missing f1;
1279 anon_enum___val3_missing f2;
1282 enum named_unsigned_enum64___val3_missing {
1283 UNSIGNED_ENUM64_VAL1___val3_missing = 0x111ffffffffULL,
1284 UNSIGNED_ENUM64_VAL2___val3_missing = 0x222,
1287 enum named_signed_enum64___val3_missing {
1288 SIGNED_ENUM64_VAL1___val3_missing = 0x111ffffffffLL,
1289 SIGNED_ENUM64_VAL2___val3_missing = -222,
1292 struct core_reloc_enum64val___val3_missing {
1293 enum named_unsigned_enum64___val3_missing f1;
1294 enum named_signed_enum64___val3_missing f2;
1297 /* missing (mandatory) second enum value, should fail */
1298 enum named_enum___err_missing {
1299 NAMED_ENUM_VAL1___err_missing = 1,
1300 NAMED_ENUM_VAL3___err_missing = 3,
1304 ANON_ENUM_VAL1___err_missing = 0x111,
1305 ANON_ENUM_VAL3___err_missing = 0x222,
1306 } anon_enum___err_missing;
1308 struct core_reloc_enumval___err_missing {
1309 enum named_enum___err_missing f1;
1310 anon_enum___err_missing f2;
1313 enum named_unsigned_enum64___err_missing {
1314 UNSIGNED_ENUM64_VAL1___err_missing = 0x1ffffffffULL,
1315 UNSIGNED_ENUM64_VAL3___err_missing = 0x3ffffffffULL,
1318 enum named_signed_enum64___err_missing {
1319 SIGNED_ENUM64_VAL1___err_missing = 0x1ffffffffLL,
1320 SIGNED_ENUM64_VAL3___err_missing = -3,
1323 struct core_reloc_enum64val___err_missing {
1324 enum named_unsigned_enum64___err_missing f1;
1325 enum named_signed_enum64___err_missing f2;