perf machine: Fix to destroy kernel maps when machine exits
[deliverable/linux.git] / tools / perf / util / bpf-loader.h
1 /*
2 * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com>
3 * Copyright (C) 2015, Huawei Inc.
4 */
5 #ifndef __BPF_LOADER_H
6 #define __BPF_LOADER_H
7
8 #include <linux/compiler.h>
9 #include <linux/err.h>
10 #include <string.h>
11 #include <bpf/libbpf.h>
12 #include "probe-event.h"
13 #include "debug.h"
14
15 enum bpf_loader_errno {
16 __BPF_LOADER_ERRNO__START = __LIBBPF_ERRNO__START - 100,
17 /* Invalid config string */
18 BPF_LOADER_ERRNO__CONFIG = __BPF_LOADER_ERRNO__START,
19 BPF_LOADER_ERRNO__GROUP, /* Invalid group name */
20 BPF_LOADER_ERRNO__EVENTNAME, /* Event name is missing */
21 BPF_LOADER_ERRNO__INTERNAL, /* BPF loader internal error */
22 BPF_LOADER_ERRNO__COMPILE, /* Error when compiling BPF scriptlet */
23 BPF_LOADER_ERRNO__CONFIG_TERM, /* Invalid config term in config term */
24 BPF_LOADER_ERRNO__PROLOGUE, /* Failed to generate prologue */
25 BPF_LOADER_ERRNO__PROLOGUE2BIG, /* Prologue too big for program */
26 BPF_LOADER_ERRNO__PROLOGUEOOB, /* Offset out of bound for prologue */
27 __BPF_LOADER_ERRNO__END,
28 };
29
30 struct bpf_object;
31 #define PERF_BPF_PROBE_GROUP "perf_bpf_probe"
32
33 typedef int (*bpf_prog_iter_callback_t)(struct probe_trace_event *tev,
34 int fd, void *arg);
35
36 #ifdef HAVE_LIBBPF_SUPPORT
37 struct bpf_object *bpf__prepare_load(const char *filename, bool source);
38 int bpf__strerror_prepare_load(const char *filename, bool source,
39 int err, char *buf, size_t size);
40
41 struct bpf_object *bpf__prepare_load_buffer(void *obj_buf, size_t obj_buf_sz,
42 const char *name);
43
44 void bpf__clear(void);
45
46 int bpf__probe(struct bpf_object *obj);
47 int bpf__unprobe(struct bpf_object *obj);
48 int bpf__strerror_probe(struct bpf_object *obj, int err,
49 char *buf, size_t size);
50
51 int bpf__load(struct bpf_object *obj);
52 int bpf__strerror_load(struct bpf_object *obj, int err,
53 char *buf, size_t size);
54 int bpf__foreach_tev(struct bpf_object *obj,
55 bpf_prog_iter_callback_t func, void *arg);
56 #else
57 static inline struct bpf_object *
58 bpf__prepare_load(const char *filename __maybe_unused,
59 bool source __maybe_unused)
60 {
61 pr_debug("ERROR: eBPF object loading is disabled during compiling.\n");
62 return ERR_PTR(-ENOTSUP);
63 }
64
65 static inline struct bpf_object *
66 bpf__prepare_load_buffer(void *obj_buf __maybe_unused,
67 size_t obj_buf_sz __maybe_unused)
68 {
69 return ERR_PTR(-ENOTSUP);
70 }
71
72 static inline void bpf__clear(void) { }
73
74 static inline int bpf__probe(struct bpf_object *obj __maybe_unused) { return 0;}
75 static inline int bpf__unprobe(struct bpf_object *obj __maybe_unused) { return 0;}
76 static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; }
77
78 static inline int
79 bpf__foreach_tev(struct bpf_object *obj __maybe_unused,
80 bpf_prog_iter_callback_t func __maybe_unused,
81 void *arg __maybe_unused)
82 {
83 return 0;
84 }
85
86 static inline int
87 __bpf_strerror(char *buf, size_t size)
88 {
89 if (!size)
90 return 0;
91 strncpy(buf,
92 "ERROR: eBPF object loading is disabled during compiling.\n",
93 size);
94 buf[size - 1] = '\0';
95 return 0;
96 }
97
98 static inline
99 int bpf__strerror_prepare_load(const char *filename __maybe_unused,
100 bool source __maybe_unused,
101 int err __maybe_unused,
102 char *buf, size_t size)
103 {
104 return __bpf_strerror(buf, size);
105 }
106
107 static inline int
108 bpf__strerror_probe(struct bpf_object *obj __maybe_unused,
109 int err __maybe_unused,
110 char *buf, size_t size)
111 {
112 return __bpf_strerror(buf, size);
113 }
114
115 static inline int bpf__strerror_load(struct bpf_object *obj __maybe_unused,
116 int err __maybe_unused,
117 char *buf, size_t size)
118 {
119 return __bpf_strerror(buf, size);
120 }
121 #endif
122 #endif
This page took 0.032629 seconds and 5 git commands to generate.