1d698f9dbSAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0 2d698f9dbSAndrii Nakryiko // Copyright (c) 2019 Facebook 3d698f9dbSAndrii Nakryiko 4d698f9dbSAndrii Nakryiko #include <linux/bpf.h> 5d698f9dbSAndrii 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> 8d698f9dbSAndrii Nakryiko 9d698f9dbSAndrii Nakryiko char _license[] SEC("license") = "GPL"; 10d698f9dbSAndrii Nakryiko 11393cdfbeSAndrii Nakryiko struct { 12d698f9dbSAndrii Nakryiko char in[256]; 13d698f9dbSAndrii Nakryiko char out[256]; 14393cdfbeSAndrii Nakryiko } data = {}; 15d698f9dbSAndrii Nakryiko 16d698f9dbSAndrii Nakryiko struct core_reloc_ptr_as_arr { 17d698f9dbSAndrii Nakryiko int a; 18d698f9dbSAndrii Nakryiko }; 19d698f9dbSAndrii Nakryiko 20694731e8SAndrii Nakryiko #define CORE_READ(dst, src) bpf_core_read(dst, sizeof(*(dst)), src) 21694731e8SAndrii Nakryiko 22d698f9dbSAndrii Nakryiko SEC("raw_tracepoint/sys_enter") test_core_ptr_as_arr(void * ctx)23d698f9dbSAndrii Nakryikoint test_core_ptr_as_arr(void *ctx) 24d698f9dbSAndrii Nakryiko { 25d698f9dbSAndrii Nakryiko struct core_reloc_ptr_as_arr *in = (void *)&data.in; 26d698f9dbSAndrii Nakryiko struct core_reloc_ptr_as_arr *out = (void *)&data.out; 27d698f9dbSAndrii Nakryiko 28694731e8SAndrii Nakryiko if (CORE_READ(&out->a, &in[2].a)) 29d698f9dbSAndrii Nakryiko return 1; 30d698f9dbSAndrii Nakryiko 31d698f9dbSAndrii Nakryiko return 0; 32d698f9dbSAndrii Nakryiko } 33d698f9dbSAndrii Nakryiko 34