1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (c) 2018 Facebook */ 3 #include <linux/bpf.h> 4 #include "bpf_helpers.h" 5 6 int _version SEC("version") = 1; 7 8 struct ipv_counts { 9 unsigned int v4; 10 unsigned int v6; 11 }; 12 13 /* just to validate we can handle maps in multiple sections */ 14 struct bpf_map_def SEC("maps") btf_map_legacy = { 15 .type = BPF_MAP_TYPE_ARRAY, 16 .key_size = sizeof(int), 17 .value_size = sizeof(long long), 18 .max_entries = 4, 19 }; 20 21 BPF_ANNOTATE_KV_PAIR(btf_map_legacy, int, struct ipv_counts); 22 23 struct { 24 int *key; 25 struct ipv_counts *value; 26 unsigned int type; 27 unsigned int max_entries; 28 } btf_map SEC(".maps") = { 29 .type = BPF_MAP_TYPE_ARRAY, 30 .max_entries = 4, 31 }; 32 33 struct dummy_tracepoint_args { 34 unsigned long long pad; 35 struct sock *sock; 36 }; 37 38 __attribute__((noinline)) 39 static int test_long_fname_2(struct dummy_tracepoint_args *arg) 40 { 41 struct ipv_counts *counts; 42 int key = 0; 43 44 if (!arg->sock) 45 return 0; 46 47 counts = bpf_map_lookup_elem(&btf_map, &key); 48 if (!counts) 49 return 0; 50 51 counts->v6++; 52 53 /* just verify we can reference both maps */ 54 counts = bpf_map_lookup_elem(&btf_map_legacy, &key); 55 if (!counts) 56 return 0; 57 58 return 0; 59 } 60 61 __attribute__((noinline)) 62 static int test_long_fname_1(struct dummy_tracepoint_args *arg) 63 { 64 return test_long_fname_2(arg); 65 } 66 67 SEC("dummy_tracepoint") 68 int _dummy_tracepoint(struct dummy_tracepoint_args *arg) 69 { 70 return test_long_fname_1(arg); 71 } 72 73 char _license[] SEC("license") = "GPL"; 74