1*3cccbaa0SDelyan Kratunov // SPDX-License-Identifier: GPL-2.0
2*3cccbaa0SDelyan Kratunov /* Copyright (c) Meta Platforms, Inc. and affiliates. */
3*3cccbaa0SDelyan Kratunov 
4*3cccbaa0SDelyan Kratunov #include <stdbool.h>
5*3cccbaa0SDelyan Kratunov #include <linux/bpf.h>
6*3cccbaa0SDelyan Kratunov #include <bpf/bpf_helpers.h>
7*3cccbaa0SDelyan Kratunov 
8*3cccbaa0SDelyan Kratunov /* volatile to force a read */
9*3cccbaa0SDelyan Kratunov const volatile int var1;
10*3cccbaa0SDelyan Kratunov volatile int var2 = 1;
11*3cccbaa0SDelyan Kratunov struct {
12*3cccbaa0SDelyan Kratunov 	int var3_1;
13*3cccbaa0SDelyan Kratunov 	__s64 var3_2;
14*3cccbaa0SDelyan Kratunov } var3;
15*3cccbaa0SDelyan Kratunov int libout1;
16*3cccbaa0SDelyan Kratunov 
17*3cccbaa0SDelyan Kratunov extern volatile bool CONFIG_BPF_SYSCALL __kconfig;
18*3cccbaa0SDelyan Kratunov 
19*3cccbaa0SDelyan Kratunov int var4[4];
20*3cccbaa0SDelyan Kratunov 
21*3cccbaa0SDelyan Kratunov __weak int var5 SEC(".data");
22*3cccbaa0SDelyan Kratunov 
23*3cccbaa0SDelyan Kratunov /* Fully contained within library extern-and-definition */
24*3cccbaa0SDelyan Kratunov extern int var6;
25*3cccbaa0SDelyan Kratunov 
26*3cccbaa0SDelyan Kratunov int var7 SEC(".data.custom");
27*3cccbaa0SDelyan Kratunov 
28*3cccbaa0SDelyan Kratunov int (*fn_ptr)(void);
29*3cccbaa0SDelyan Kratunov 
30*3cccbaa0SDelyan Kratunov struct {
31*3cccbaa0SDelyan Kratunov 	__uint(type, BPF_MAP_TYPE_HASH);
32*3cccbaa0SDelyan Kratunov 	__type(key, __u32);
33*3cccbaa0SDelyan Kratunov 	__type(value, __u32);
34*3cccbaa0SDelyan Kratunov 	__uint(max_entries, 16);
35*3cccbaa0SDelyan Kratunov } map1 SEC(".maps");
36*3cccbaa0SDelyan Kratunov 
37*3cccbaa0SDelyan Kratunov extern struct {
38*3cccbaa0SDelyan Kratunov 	__uint(type, BPF_MAP_TYPE_HASH);
39*3cccbaa0SDelyan Kratunov 	__type(key, __u32);
40*3cccbaa0SDelyan Kratunov 	__type(value, __u32);
41*3cccbaa0SDelyan Kratunov 	__uint(max_entries, 16);
42*3cccbaa0SDelyan Kratunov } map2 SEC(".maps");
43*3cccbaa0SDelyan Kratunov 
lib_routine(void)44*3cccbaa0SDelyan Kratunov int lib_routine(void)
45*3cccbaa0SDelyan Kratunov {
46*3cccbaa0SDelyan Kratunov 	__u32 key = 1, value = 2;
47*3cccbaa0SDelyan Kratunov 
48*3cccbaa0SDelyan Kratunov 	(void) CONFIG_BPF_SYSCALL;
49*3cccbaa0SDelyan Kratunov 	bpf_map_update_elem(&map2, &key, &value, BPF_ANY);
50*3cccbaa0SDelyan Kratunov 
51*3cccbaa0SDelyan Kratunov 	libout1 = var1 + var2 + var3.var3_1 + var3.var3_2 + var5 + var6;
52*3cccbaa0SDelyan Kratunov 	return libout1;
53*3cccbaa0SDelyan Kratunov }
54*3cccbaa0SDelyan Kratunov 
55*3cccbaa0SDelyan Kratunov SEC("perf_event")
lib_perf_handler(struct pt_regs * ctx)56*3cccbaa0SDelyan Kratunov int lib_perf_handler(struct pt_regs *ctx)
57*3cccbaa0SDelyan Kratunov {
58*3cccbaa0SDelyan Kratunov 	return 0;
59*3cccbaa0SDelyan Kratunov }
60*3cccbaa0SDelyan Kratunov 
61*3cccbaa0SDelyan Kratunov char LICENSE[] SEC("license") = "GPL";
62