1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
3 #include "bpf_experimental.h"
4 #include <bpf/bpf_helpers.h>
5 #include "bpf_misc.h"
6 #include <stdbool.h>
7 
8 char _license[] SEC("license") = "GPL";
9 
10 typedef __s32 s32;
11 typedef s32 i32;
12 typedef __u8 u8;
13 
14 enum Enum { EA1 = 0, EA2 = 11, EA3 = 10 };
15 enum Enumu64 {EB1 = 0llu, EB2 = 12llu };
16 enum Enums64 { EC1 = 0ll, EC2 = 13ll };
17 
18 const volatile __s64 var_s64 = -1;
19 const volatile __u64 var_u64 = 0;
20 const volatile i32 var_s32 = -1;
21 const volatile __u32 var_u32 = 0;
22 const volatile __s16 var_s16 = -1;
23 const volatile __u16 var_u16 = 0;
24 const volatile __s8 var_s8 = -1;
25 const volatile u8 var_u8 = 0;
26 const volatile enum Enum var_ea = EA1;
27 const volatile enum Enumu64 var_eb = EB1;
28 const volatile enum Enums64 var_ec = EC1;
29 const volatile bool var_b = false;
30 const volatile i32 arr[32];
31 const volatile enum Enum enum_arr[32];
32 const volatile i32 three_d[47][19][17];
33 const volatile i32 *ptr_arr[32];
34 
35 struct Struct {
36 	int:16;
37 	__u16 filler;
38 	struct {
39 		const __u16 filler2;
40 	};
41 	struct Struct2 {
42 		__u16 filler;
43 		volatile struct {
44 			const int:1;
45 			union {
46 				const volatile u8 var_u8[3];
47 				const volatile __s16 filler3;
48 				const int:1;
49 				s32 mat[7][5];
50 			} u;
51 		};
52 	} struct2[2][4];
53 };
54 
55 const volatile __u32 stru = 0; /* same prefix as below */
56 const volatile struct Struct struct1[3];
57 const volatile struct Struct struct11[11][7];
58 
59 struct Struct3 {
60 	struct {
61 		u8 var_u8_l;
62 	};
63 	struct {
64 		struct {
65 			u8 var_u8_h;
66 		};
67 	};
68 };
69 
70 typedef struct Struct3 Struct3_t;
71 
72 union Union {
73 	__u16 var_u16;
74 	Struct3_t struct3;
75 };
76 
77 const volatile union Union union1 = {.var_u16 = -1};
78 
79 SEC("socket")
test_set_globals(void * ctx)80 int test_set_globals(void *ctx)
81 {
82 	volatile __s8 a;
83 
84 	a = var_s64;
85 	a = var_u64;
86 	a = var_s32;
87 	a = var_u32;
88 	a = var_s16;
89 	a = var_u16;
90 	a = var_s8;
91 	a = var_u8;
92 	a = var_ea;
93 	a = var_eb;
94 	a = var_ec;
95 	a = var_b;
96 	a = struct1[2].struct2[1][2].u.var_u8[2];
97 	a = union1.var_u16;
98 	a = arr[3];
99 	a = arr[EA2];
100 	a = enum_arr[EC2];
101 	a = three_d[31][7][EA2];
102 	a = struct1[2].struct2[1][2].u.mat[5][3];
103 	a = struct11[7][5].struct2[0][1].u.mat[3][0];
104 
105 	return a;
106 }
107