10b163565SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
20b163565SAndrii Nakryiko // Copyright (c) 2019 Facebook
30b163565SAndrii Nakryiko 
40b163565SAndrii Nakryiko #include <linux/bpf.h>
50b163565SAndrii 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>
80b163565SAndrii Nakryiko 
90b163565SAndrii Nakryiko char _license[] SEC("license") = "GPL";
100b163565SAndrii Nakryiko 
11393cdfbeSAndrii Nakryiko struct {
120b163565SAndrii Nakryiko 	char in[256];
130b163565SAndrii Nakryiko 	char out[256];
14393cdfbeSAndrii Nakryiko } data = {};
150b163565SAndrii Nakryiko 
160b163565SAndrii Nakryiko struct core_reloc_size_output {
170b163565SAndrii Nakryiko 	int int_sz;
18*785c3342SAndrii Nakryiko 	int int_off;
190b163565SAndrii Nakryiko 	int struct_sz;
20*785c3342SAndrii Nakryiko 	int struct_off;
210b163565SAndrii Nakryiko 	int union_sz;
22*785c3342SAndrii Nakryiko 	int union_off;
230b163565SAndrii Nakryiko 	int arr_sz;
24*785c3342SAndrii Nakryiko 	int arr_off;
250b163565SAndrii Nakryiko 	int arr_elem_sz;
26*785c3342SAndrii Nakryiko 	int arr_elem_off;
270b163565SAndrii Nakryiko 	int ptr_sz;
28*785c3342SAndrii Nakryiko 	int ptr_off;
290b163565SAndrii Nakryiko 	int enum_sz;
30*785c3342SAndrii Nakryiko 	int enum_off;
313fcd50d6SIlya Leoshkevich 	int float_sz;
32*785c3342SAndrii Nakryiko 	int float_off;
330b163565SAndrii Nakryiko };
340b163565SAndrii Nakryiko 
350b163565SAndrii Nakryiko struct core_reloc_size {
360b163565SAndrii Nakryiko 	int int_field;
370b163565SAndrii Nakryiko 	struct { int x; } struct_field;
380b163565SAndrii Nakryiko 	union { int x; } union_field;
390b163565SAndrii Nakryiko 	int arr_field[4];
400b163565SAndrii Nakryiko 	void *ptr_field;
410b163565SAndrii Nakryiko 	enum { VALUE = 123 } enum_field;
423fcd50d6SIlya Leoshkevich 	float float_field;
430b163565SAndrii Nakryiko };
440b163565SAndrii Nakryiko 
450b163565SAndrii Nakryiko SEC("raw_tracepoint/sys_enter")
test_core_size(void * ctx)460b163565SAndrii Nakryiko int test_core_size(void *ctx)
470b163565SAndrii Nakryiko {
480b163565SAndrii Nakryiko 	struct core_reloc_size *in = (void *)&data.in;
490b163565SAndrii Nakryiko 	struct core_reloc_size_output *out = (void *)&data.out;
500b163565SAndrii Nakryiko 
510b163565SAndrii Nakryiko 	out->int_sz = bpf_core_field_size(in->int_field);
52*785c3342SAndrii Nakryiko 	out->int_off = bpf_core_field_offset(in->int_field);
53*785c3342SAndrii Nakryiko 
540b163565SAndrii Nakryiko 	out->struct_sz = bpf_core_field_size(in->struct_field);
55*785c3342SAndrii Nakryiko 	out->struct_off = bpf_core_field_offset(in->struct_field);
56*785c3342SAndrii Nakryiko 
570b163565SAndrii Nakryiko 	out->union_sz = bpf_core_field_size(in->union_field);
58*785c3342SAndrii Nakryiko 	out->union_off = bpf_core_field_offset(in->union_field);
59*785c3342SAndrii Nakryiko 
600b163565SAndrii Nakryiko 	out->arr_sz = bpf_core_field_size(in->arr_field);
61*785c3342SAndrii Nakryiko 	out->arr_off = bpf_core_field_offset(in->arr_field);
62*785c3342SAndrii Nakryiko 
63*785c3342SAndrii Nakryiko 	out->arr_elem_sz = bpf_core_field_size(struct core_reloc_size, arr_field[1]);
64*785c3342SAndrii Nakryiko 	out->arr_elem_off = bpf_core_field_offset(struct core_reloc_size, arr_field[1]);
65*785c3342SAndrii Nakryiko 
662a4ca46bSAndrii Nakryiko 	out->ptr_sz = bpf_core_field_size(struct core_reloc_size, ptr_field);
67*785c3342SAndrii Nakryiko 	out->ptr_off = bpf_core_field_offset(struct core_reloc_size, ptr_field);
68*785c3342SAndrii Nakryiko 
692a4ca46bSAndrii Nakryiko 	out->enum_sz = bpf_core_field_size(struct core_reloc_size, enum_field);
70*785c3342SAndrii Nakryiko 	out->enum_off = bpf_core_field_offset(struct core_reloc_size, enum_field);
71*785c3342SAndrii Nakryiko 
722a4ca46bSAndrii Nakryiko 	out->float_sz = bpf_core_field_size(struct core_reloc_size, float_field);
73*785c3342SAndrii Nakryiko 	out->float_off = bpf_core_field_offset(struct core_reloc_size, float_field);
740b163565SAndrii Nakryiko 
750b163565SAndrii Nakryiko 	return 0;
760b163565SAndrii Nakryiko }
770b163565SAndrii Nakryiko 
78