120a9ad2eSAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0 220a9ad2eSAndrii Nakryiko // Copyright (c) 2019 Facebook 320a9ad2eSAndrii Nakryiko 420a9ad2eSAndrii Nakryiko #include <linux/bpf.h> 520a9ad2eSAndrii Nakryiko #include <stdint.h> 620a9ad2eSAndrii Nakryiko #include "bpf_helpers.h" 720a9ad2eSAndrii Nakryiko 820a9ad2eSAndrii Nakryiko char _license[] SEC("license") = "GPL"; 920a9ad2eSAndrii Nakryiko 1020a9ad2eSAndrii Nakryiko static volatile struct data { 1120a9ad2eSAndrii Nakryiko char in[256]; 1220a9ad2eSAndrii Nakryiko char out[256]; 1320a9ad2eSAndrii Nakryiko } data; 1420a9ad2eSAndrii Nakryiko 1520a9ad2eSAndrii Nakryiko struct core_reloc_arrays_output { 1620a9ad2eSAndrii Nakryiko int a2; 1720a9ad2eSAndrii Nakryiko char b123; 1820a9ad2eSAndrii Nakryiko int c1c; 1920a9ad2eSAndrii Nakryiko int d00d; 2020a9ad2eSAndrii Nakryiko }; 2120a9ad2eSAndrii Nakryiko 2220a9ad2eSAndrii Nakryiko struct core_reloc_arrays_substruct { 2320a9ad2eSAndrii Nakryiko int c; 2420a9ad2eSAndrii Nakryiko int d; 2520a9ad2eSAndrii Nakryiko }; 2620a9ad2eSAndrii Nakryiko 2720a9ad2eSAndrii Nakryiko struct core_reloc_arrays { 2820a9ad2eSAndrii Nakryiko int a[5]; 2920a9ad2eSAndrii Nakryiko char b[2][3][4]; 3020a9ad2eSAndrii Nakryiko struct core_reloc_arrays_substruct c[3]; 3120a9ad2eSAndrii Nakryiko struct core_reloc_arrays_substruct d[1][2]; 3220a9ad2eSAndrii Nakryiko }; 3320a9ad2eSAndrii Nakryiko 34694731e8SAndrii Nakryiko #define CORE_READ(dst, src) bpf_core_read(dst, sizeof(*(dst)), src) 35694731e8SAndrii Nakryiko 3620a9ad2eSAndrii Nakryiko SEC("raw_tracepoint/sys_enter") 3720a9ad2eSAndrii Nakryiko int test_core_arrays(void *ctx) 3820a9ad2eSAndrii Nakryiko { 3920a9ad2eSAndrii Nakryiko struct core_reloc_arrays *in = (void *)&data.in; 4020a9ad2eSAndrii Nakryiko struct core_reloc_arrays_output *out = (void *)&data.out; 4120a9ad2eSAndrii Nakryiko 4220a9ad2eSAndrii Nakryiko /* in->a[2] */ 43694731e8SAndrii Nakryiko if (CORE_READ(&out->a2, &in->a[2])) 4420a9ad2eSAndrii Nakryiko return 1; 4520a9ad2eSAndrii Nakryiko /* in->b[1][2][3] */ 46694731e8SAndrii Nakryiko if (CORE_READ(&out->b123, &in->b[1][2][3])) 4720a9ad2eSAndrii Nakryiko return 1; 4820a9ad2eSAndrii Nakryiko /* in->c[1].c */ 49694731e8SAndrii Nakryiko if (CORE_READ(&out->c1c, &in->c[1].c)) 5020a9ad2eSAndrii Nakryiko return 1; 5120a9ad2eSAndrii Nakryiko /* in->d[0][0].d */ 52694731e8SAndrii Nakryiko if (CORE_READ(&out->d00d, &in->d[0][0].d)) 5320a9ad2eSAndrii Nakryiko return 1; 5420a9ad2eSAndrii Nakryiko 5520a9ad2eSAndrii Nakryiko return 0; 5620a9ad2eSAndrii Nakryiko } 5720a9ad2eSAndrii Nakryiko 58