1 // SPDX-License-Identifier: GPL-2.0 1 // SPDX-License-Identifier: GPL-2.0 2 #include <stdio.h> 2 #include <stdio.h> 3 #include <unistd.h> 3 #include <unistd.h> >> 4 #include <linux/bpf.h> 4 #include <string.h> 5 #include <string.h> 5 #include <assert.h> 6 #include <assert.h> 6 #include <bpf/libbpf.h> !! 7 #include <sys/resource.h> 7 #include <bpf/bpf.h> !! 8 #include "libbpf.h" 8 #include "trace_helpers.h" !! 9 #include "bpf_load.h" 9 10 10 int main(int ac, char **argv) 11 int main(int ac, char **argv) 11 { 12 { 12 struct bpf_object *obj = NULL; !! 13 struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY}; 13 struct bpf_link *links[20]; << 14 long key, next_key, value; 14 long key, next_key, value; 15 struct bpf_program *prog; << 16 int map_fd, i, j = 0; << 17 char filename[256]; 15 char filename[256]; 18 struct ksym *sym; 16 struct ksym *sym; >> 17 int i; >> 18 >> 19 snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); >> 20 setrlimit(RLIMIT_MEMLOCK, &r); 19 21 20 if (load_kallsyms()) { 22 if (load_kallsyms()) { 21 printf("failed to process /pro 23 printf("failed to process /proc/kallsyms\n"); 22 return 2; 24 return 2; 23 } 25 } 24 26 25 snprintf(filename, sizeof(filename), " !! 27 if (load_bpf_file(filename)) { 26 obj = bpf_object__open_file(filename, !! 28 printf("%s", bpf_log_buf); 27 if (libbpf_get_error(obj)) { !! 29 return 1; 28 fprintf(stderr, "ERROR: openin << 29 obj = NULL; << 30 goto cleanup; << 31 } << 32 << 33 /* load BPF program */ << 34 if (bpf_object__load(obj)) { << 35 fprintf(stderr, "ERROR: loadin << 36 goto cleanup; << 37 } << 38 << 39 map_fd = bpf_object__find_map_fd_by_na << 40 if (map_fd < 0) { << 41 fprintf(stderr, "ERROR: findin << 42 goto cleanup; << 43 } << 44 << 45 bpf_object__for_each_program(prog, obj << 46 links[j] = bpf_program__attach << 47 if (libbpf_get_error(links[j]) << 48 fprintf(stderr, "bpf_p << 49 links[j] = NULL; << 50 goto cleanup; << 51 } << 52 j++; << 53 } 30 } 54 31 55 for (i = 0; i < 5; i++) { 32 for (i = 0; i < 5; i++) { 56 key = 0; 33 key = 0; 57 printf("kprobing funcs:"); 34 printf("kprobing funcs:"); 58 while (bpf_map_get_next_key(ma !! 35 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) { 59 bpf_map_lookup_elem(ma !! 36 bpf_map_lookup_elem(map_fd[0], &next_key, &value); 60 assert(next_key == val 37 assert(next_key == value); 61 sym = ksym_search(valu 38 sym = ksym_search(value); 62 key = next_key; << 63 if (!sym) { << 64 printf("ksym n << 65 continue; << 66 } << 67 << 68 printf(" %s", sym->nam 39 printf(" %s", sym->name); >> 40 key = next_key; 69 } 41 } 70 if (key) 42 if (key) 71 printf("\n"); 43 printf("\n"); 72 key = 0; 44 key = 0; 73 while (bpf_map_get_next_key(ma !! 45 while (bpf_map_get_next_key(map_fd[0], &key, &next_key) == 0) 74 bpf_map_delete_elem(ma !! 46 bpf_map_delete_elem(map_fd[0], &next_key); 75 sleep(1); 47 sleep(1); 76 } 48 } 77 49 78 cleanup: << 79 for (j--; j >= 0; j--) << 80 bpf_link__destroy(links[j]); << 81 << 82 bpf_object__close(obj); << 83 return 0; 50 return 0; 84 } 51 } 85 52
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.