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> 6d9db3550SAndrii Nakryiko #include "bpf_helpers.h" 7d9db3550SAndrii Nakryiko 8d9db3550SAndrii Nakryiko char _license[] SEC("license") = "GPL"; 9d9db3550SAndrii Nakryiko 10d9db3550SAndrii Nakryiko static volatile struct data { 11d9db3550SAndrii Nakryiko char in[256]; 12d9db3550SAndrii Nakryiko char out[256]; 13d9db3550SAndrii Nakryiko } data; 14d9db3550SAndrii Nakryiko 15d9db3550SAndrii Nakryiko enum core_reloc_primitives_enum { 16d9db3550SAndrii Nakryiko A = 0, 17d9db3550SAndrii Nakryiko B = 1, 18d9db3550SAndrii Nakryiko }; 19d9db3550SAndrii Nakryiko 20d9db3550SAndrii Nakryiko struct core_reloc_primitives { 21d9db3550SAndrii Nakryiko char a; 22d9db3550SAndrii Nakryiko int b; 23d9db3550SAndrii Nakryiko enum core_reloc_primitives_enum c; 24d9db3550SAndrii Nakryiko void *d; 25d9db3550SAndrii Nakryiko int (*f)(const char *); 26d9db3550SAndrii Nakryiko }; 27d9db3550SAndrii Nakryiko 28694731e8SAndrii Nakryiko #define CORE_READ(dst, src) bpf_core_read(dst, sizeof(*(dst)), src) 29694731e8SAndrii Nakryiko 30d9db3550SAndrii Nakryiko SEC("raw_tracepoint/sys_enter") 31d9db3550SAndrii Nakryiko int test_core_primitives(void *ctx) 32d9db3550SAndrii Nakryiko { 33d9db3550SAndrii Nakryiko struct core_reloc_primitives *in = (void *)&data.in; 34d9db3550SAndrii Nakryiko struct core_reloc_primitives *out = (void *)&data.out; 35d9db3550SAndrii Nakryiko 36694731e8SAndrii Nakryiko if (CORE_READ(&out->a, &in->a) || 37694731e8SAndrii Nakryiko CORE_READ(&out->b, &in->b) || 38694731e8SAndrii Nakryiko CORE_READ(&out->c, &in->c) || 39694731e8SAndrii Nakryiko CORE_READ(&out->d, &in->d) || 40694731e8SAndrii Nakryiko CORE_READ(&out->f, &in->f)) 41d9db3550SAndrii Nakryiko return 1; 42d9db3550SAndrii Nakryiko 43d9db3550SAndrii Nakryiko return 0; 44d9db3550SAndrii Nakryiko } 45d9db3550SAndrii Nakryiko 46