Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/samples/bpf/spintest_user.c
25924 views
1
// SPDX-License-Identifier: GPL-2.0
2
#include <stdio.h>
3
#include <unistd.h>
4
#include <string.h>
5
#include <assert.h>
6
#include <bpf/libbpf.h>
7
#include <bpf/bpf.h>
8
#include "trace_helpers.h"
9
10
int main(int ac, char **argv)
11
{
12
struct bpf_object *obj = NULL;
13
struct bpf_link *links[20];
14
long key, next_key, value;
15
struct bpf_program *prog;
16
int map_fd, i, j = 0;
17
char filename[256];
18
struct ksym *sym;
19
20
if (load_kallsyms()) {
21
printf("failed to process /proc/kallsyms\n");
22
return 2;
23
}
24
25
snprintf(filename, sizeof(filename), "%s.bpf.o", argv[0]);
26
obj = bpf_object__open_file(filename, NULL);
27
if (libbpf_get_error(obj)) {
28
fprintf(stderr, "ERROR: opening BPF object file failed\n");
29
obj = NULL;
30
goto cleanup;
31
}
32
33
/* load BPF program */
34
if (bpf_object__load(obj)) {
35
fprintf(stderr, "ERROR: loading BPF object file failed\n");
36
goto cleanup;
37
}
38
39
map_fd = bpf_object__find_map_fd_by_name(obj, "my_map");
40
if (map_fd < 0) {
41
fprintf(stderr, "ERROR: finding a map in obj file failed\n");
42
goto cleanup;
43
}
44
45
bpf_object__for_each_program(prog, obj) {
46
links[j] = bpf_program__attach(prog);
47
if (libbpf_get_error(links[j])) {
48
fprintf(stderr, "bpf_program__attach failed\n");
49
links[j] = NULL;
50
goto cleanup;
51
}
52
j++;
53
}
54
55
for (i = 0; i < 5; i++) {
56
key = 0;
57
printf("kprobing funcs:");
58
while (bpf_map_get_next_key(map_fd, &key, &next_key) == 0) {
59
bpf_map_lookup_elem(map_fd, &next_key, &value);
60
assert(next_key == value);
61
sym = ksym_search(value);
62
key = next_key;
63
if (!sym) {
64
printf("ksym not found. Is kallsyms loaded?\n");
65
continue;
66
}
67
68
printf(" %s", sym->name);
69
}
70
if (key)
71
printf("\n");
72
key = 0;
73
while (bpf_map_get_next_key(map_fd, &key, &next_key) == 0)
74
bpf_map_delete_elem(map_fd, &next_key);
75
sleep(1);
76
}
77
78
cleanup:
79
for (j--; j >= 0; j--)
80
bpf_link__destroy(links[j]);
81
82
bpf_object__close(obj);
83
return 0;
84
}
85
86