github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/testdata/subprog_reloc.c (about) 1 /* This file excercises the ELF loader. 2 */ 3 4 #include "common.h" 5 6 char __license[] __section("license") = "MIT"; 7 8 struct bpf_map_def hash_map __section("maps") = { 9 .type = BPF_MAP_TYPE_HASH, 10 .key_size = sizeof(uint32_t), 11 .value_size = sizeof(uint64_t), 12 .max_entries = 1, 13 }; 14 15 static int sub_prog() { 16 uint32_t key = 0; 17 uint64_t val = 42; 18 19 map_update_elem(&hash_map, &key, &val, /* BPF_ANY */ 0); 20 21 return 0; 22 } 23 24 __section("xdp") int fp_relocation() { 25 uint32_t key = 0; 26 uint64_t val = 1; 27 28 map_update_elem(&hash_map, &key, &val, /* BPF_ANY */ 0); 29 30 for_each_map_elem(&hash_map, sub_prog, (void *)0, 0); 31 32 uint64_t *new_val = map_lookup_elem(&hash_map, &key); 33 if (!new_val) { 34 return -1; 35 } 36 37 return *new_val; 38 }