162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* Copyright (c) 2019 Facebook */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <stdbool.h> 562306a36Sopenharmony_ci#include <linux/bpf.h> 662306a36Sopenharmony_ci#include <bpf/bpf_helpers.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define __read_mostly SEC(".data.read_mostly") 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct s { 1162306a36Sopenharmony_ci int a; 1262306a36Sopenharmony_ci long long b; 1362306a36Sopenharmony_ci} __attribute__((packed)); 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci/* .data section */ 1662306a36Sopenharmony_ciint in1 = -1; 1762306a36Sopenharmony_cilong long in2 = -1; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* .bss section */ 2062306a36Sopenharmony_cichar in3 = '\0'; 2162306a36Sopenharmony_cilong long in4 __attribute__((aligned(64))) = 0; 2262306a36Sopenharmony_cistruct s in5 = {}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* .rodata section */ 2562306a36Sopenharmony_ciconst volatile struct { 2662306a36Sopenharmony_ci const int in6; 2762306a36Sopenharmony_ci} in = {}; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci/* .data section */ 3062306a36Sopenharmony_ciint out1 = -1; 3162306a36Sopenharmony_cilong long out2 = -1; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* .bss section */ 3462306a36Sopenharmony_cichar out3 = 0; 3562306a36Sopenharmony_cilong long out4 = 0; 3662306a36Sopenharmony_ciint out6 = 0; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciextern bool CONFIG_BPF_SYSCALL __kconfig; 3962306a36Sopenharmony_ciextern int LINUX_KERNEL_VERSION __kconfig; 4062306a36Sopenharmony_cibool bpf_syscall = 0; 4162306a36Sopenharmony_ciint kern_ver = 0; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistruct s out5 = {}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciconst volatile int in_dynarr_sz SEC(".rodata.dyn"); 4762306a36Sopenharmony_ciconst volatile int in_dynarr[4] SEC(".rodata.dyn") = { -1, -2, -3, -4 }; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint out_dynarr[4] SEC(".data.dyn") = { 1, 2, 3, 4 }; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciint read_mostly_var __read_mostly; 5262306a36Sopenharmony_ciint out_mostly_var; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cichar huge_arr[16 * 1024 * 1024]; 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* non-mmapable custom .data section */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct my_value { int x, y, z; }; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci__hidden int zero_key SEC(".data.non_mmapable"); 6162306a36Sopenharmony_cistatic struct my_value zero_value SEC(".data.non_mmapable"); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistruct { 6462306a36Sopenharmony_ci __uint(type, BPF_MAP_TYPE_ARRAY); 6562306a36Sopenharmony_ci __type(key, int); 6662306a36Sopenharmony_ci __type(value, struct my_value); 6762306a36Sopenharmony_ci __uint(max_entries, 1); 6862306a36Sopenharmony_ci} my_map SEC(".maps"); 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ciSEC("raw_tp/sys_enter") 7162306a36Sopenharmony_ciint handler(const void *ctx) 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci int i; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci out1 = in1; 7662306a36Sopenharmony_ci out2 = in2; 7762306a36Sopenharmony_ci out3 = in3; 7862306a36Sopenharmony_ci out4 = in4; 7962306a36Sopenharmony_ci out5 = in5; 8062306a36Sopenharmony_ci out6 = in.in6; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci bpf_syscall = CONFIG_BPF_SYSCALL; 8362306a36Sopenharmony_ci kern_ver = LINUX_KERNEL_VERSION; 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci for (i = 0; i < in_dynarr_sz; i++) 8662306a36Sopenharmony_ci out_dynarr[i] = in_dynarr[i]; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci out_mostly_var = read_mostly_var; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci huge_arr[sizeof(huge_arr) - 1] = 123; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci /* make sure zero_key and zero_value are not optimized out */ 9362306a36Sopenharmony_ci bpf_map_update_elem(&my_map, &zero_key, &zero_value, BPF_ANY); 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci return 0; 9662306a36Sopenharmony_ci} 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_cichar _license[] SEC("license") = "GPL"; 99