1*37086bfdSBrendan Jackman // SPDX-License-Identifier: GPL-2.0
2*37086bfdSBrendan Jackman #include <linux/bpf.h>
3*37086bfdSBrendan Jackman #include <bpf/bpf_helpers.h>
4*37086bfdSBrendan Jackman #include <bpf/bpf_tracing.h>
5*37086bfdSBrendan Jackman #include <stdbool.h>
6*37086bfdSBrendan Jackman 
7*37086bfdSBrendan Jackman #ifdef ENABLE_ATOMICS_TESTS
8*37086bfdSBrendan Jackman bool skip_tests __attribute((__section__(".data"))) = false;
9*37086bfdSBrendan Jackman #else
10*37086bfdSBrendan Jackman bool skip_tests = true;
11*37086bfdSBrendan Jackman #endif
12*37086bfdSBrendan Jackman 
13*37086bfdSBrendan Jackman SEC("fentry/bpf_fentry_test1")
BPF_PROG(sub,int x)14*37086bfdSBrendan Jackman int BPF_PROG(sub, int x)
15*37086bfdSBrendan Jackman {
16*37086bfdSBrendan Jackman #ifdef ENABLE_ATOMICS_TESTS
17*37086bfdSBrendan Jackman 	int a = 0;
18*37086bfdSBrendan Jackman 	int b = __sync_fetch_and_add(&a, 1);
19*37086bfdSBrendan Jackman 	/* b is certainly 0 here. Can the verifier tell? */
20*37086bfdSBrendan Jackman 	while (b)
21*37086bfdSBrendan Jackman 		continue;
22*37086bfdSBrendan Jackman #endif
23*37086bfdSBrendan Jackman 	return 0;
24*37086bfdSBrendan Jackman }
25