1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2019 Facebook 3 4 #include <linux/bpf.h> 5 #include <stdint.h> 6 #include <bpf/bpf_helpers.h> 7 #include <bpf/bpf_core_read.h> 8 9 char _license[] SEC("license") = "GPL"; 10 11 struct { 12 char in[256]; 13 char out[256]; 14 } data = {}; 15 16 struct core_reloc_size_output { 17 int int_sz; 18 int struct_sz; 19 int union_sz; 20 int arr_sz; 21 int arr_elem_sz; 22 int ptr_sz; 23 int enum_sz; 24 }; 25 26 struct core_reloc_size { 27 int int_field; 28 struct { int x; } struct_field; 29 union { int x; } union_field; 30 int arr_field[4]; 31 void *ptr_field; 32 enum { VALUE = 123 } enum_field; 33 }; 34 35 SEC("raw_tracepoint/sys_enter") 36 int test_core_size(void *ctx) 37 { 38 struct core_reloc_size *in = (void *)&data.in; 39 struct core_reloc_size_output *out = (void *)&data.out; 40 41 out->int_sz = bpf_core_field_size(in->int_field); 42 out->struct_sz = bpf_core_field_size(in->struct_field); 43 out->union_sz = bpf_core_field_size(in->union_field); 44 out->arr_sz = bpf_core_field_size(in->arr_field); 45 out->arr_elem_sz = bpf_core_field_size(in->arr_field[0]); 46 out->ptr_sz = bpf_core_field_size(in->ptr_field); 47 out->enum_sz = bpf_core_field_size(in->enum_field); 48 49 return 0; 50 } 51 52