1d9db3550SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
2d9db3550SAndrii Nakryiko // Copyright (c) 2019 Facebook
3d9db3550SAndrii Nakryiko 
4d9db3550SAndrii Nakryiko #include <linux/bpf.h>
5d9db3550SAndrii Nakryiko #include <stdint.h>
63e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h>
73e689141SToke Høiland-Jørgensen #include <bpf/bpf_core_read.h>
8d9db3550SAndrii Nakryiko 
9d9db3550SAndrii Nakryiko char _license[] SEC("license") = "GPL";
10d9db3550SAndrii Nakryiko 
11393cdfbeSAndrii Nakryiko struct {
12d9db3550SAndrii Nakryiko 	char in[256];
13d9db3550SAndrii Nakryiko 	char out[256];
14393cdfbeSAndrii Nakryiko } data = {};
15d9db3550SAndrii Nakryiko 
16d9db3550SAndrii Nakryiko enum core_reloc_primitives_enum {
17d9db3550SAndrii Nakryiko 	A = 0,
18d9db3550SAndrii Nakryiko 	B = 1,
19d9db3550SAndrii Nakryiko };
20d9db3550SAndrii Nakryiko 
21d9db3550SAndrii Nakryiko struct core_reloc_primitives {
22d9db3550SAndrii Nakryiko 	char a;
23d9db3550SAndrii Nakryiko 	int b;
24d9db3550SAndrii Nakryiko 	enum core_reloc_primitives_enum c;
25d9db3550SAndrii Nakryiko 	void *d;
26d9db3550SAndrii Nakryiko 	int (*f)(const char *);
27d9db3550SAndrii Nakryiko };
28d9db3550SAndrii Nakryiko 
29694731e8SAndrii Nakryiko #define CORE_READ(dst, src) bpf_core_read(dst, sizeof(*(dst)), src)
30694731e8SAndrii Nakryiko 
31d9db3550SAndrii Nakryiko SEC("raw_tracepoint/sys_enter")
test_core_primitives(void * ctx)32d9db3550SAndrii Nakryiko int test_core_primitives(void *ctx)
33d9db3550SAndrii Nakryiko {
34d9db3550SAndrii Nakryiko 	struct core_reloc_primitives *in = (void *)&data.in;
35d9db3550SAndrii Nakryiko 	struct core_reloc_primitives *out = (void *)&data.out;
36d9db3550SAndrii Nakryiko 
37694731e8SAndrii Nakryiko 	if (CORE_READ(&out->a, &in->a) ||
38694731e8SAndrii Nakryiko 	    CORE_READ(&out->b, &in->b) ||
39694731e8SAndrii Nakryiko 	    CORE_READ(&out->c, &in->c) ||
40694731e8SAndrii Nakryiko 	    CORE_READ(&out->d, &in->d) ||
41694731e8SAndrii Nakryiko 	    CORE_READ(&out->f, &in->f))
42d9db3550SAndrii Nakryiko 		return 1;
43d9db3550SAndrii Nakryiko 
44d9db3550SAndrii Nakryiko 	return 0;
45d9db3550SAndrii Nakryiko }
46d9db3550SAndrii Nakryiko 
47