2 * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com>
3 * Copyright (C) 2015, Huawei Inc.
8 #include <linux/compiler.h>
11 #include <bpf/libbpf.h>
12 #include "probe-event.h"
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__END,
28 #define PERF_BPF_PROBE_GROUP "perf_bpf_probe"
30 typedef int (*bpf_prog_iter_callback_t)(struct probe_trace_event *tev,
33 #ifdef HAVE_LIBBPF_SUPPORT
34 struct bpf_object *bpf__prepare_load(const char *filename, bool source);
35 int bpf__strerror_prepare_load(const char *filename, bool source,
36 int err, char *buf, size_t size);
38 struct bpf_object *bpf__prepare_load_buffer(void *obj_buf, size_t obj_buf_sz,
41 void bpf__clear(void);
43 int bpf__probe(struct bpf_object *obj);
44 int bpf__unprobe(struct bpf_object *obj);
45 int bpf__strerror_probe(struct bpf_object *obj, int err,
46 char *buf, size_t size);
48 int bpf__load(struct bpf_object *obj);
49 int bpf__strerror_load(struct bpf_object *obj, int err,
50 char *buf, size_t size);
51 int bpf__foreach_tev(struct bpf_object *obj,
52 bpf_prog_iter_callback_t func, void *arg);
54 static inline struct bpf_object *
55 bpf__prepare_load(const char *filename __maybe_unused,
56 bool source __maybe_unused)
58 pr_debug("ERROR: eBPF object loading is disabled during compiling.\n");
59 return ERR_PTR(-ENOTSUP);
62 static inline struct bpf_object *
63 bpf__prepare_load_buffer(void *obj_buf __maybe_unused,
64 size_t obj_buf_sz __maybe_unused)
66 return ERR_PTR(-ENOTSUP);
69 static inline void bpf__clear(void) { }
71 static inline int bpf__probe(struct bpf_object *obj __maybe_unused) { return 0;}
72 static inline int bpf__unprobe(struct bpf_object *obj __maybe_unused) { return 0;}
73 static inline int bpf__load(struct bpf_object *obj __maybe_unused) { return 0; }
76 bpf__foreach_tev(struct bpf_object *obj __maybe_unused,
77 bpf_prog_iter_callback_t func __maybe_unused,
78 void *arg __maybe_unused)
84 __bpf_strerror(char *buf, size_t size)
89 "ERROR: eBPF object loading is disabled during compiling.\n",
96 int bpf__strerror_prepare_load(const char *filename __maybe_unused,
97 bool source __maybe_unused,
98 int err __maybe_unused,
99 char *buf, size_t size)
101 return __bpf_strerror(buf, size);
105 bpf__strerror_probe(struct bpf_object *obj __maybe_unused,
106 int err __maybe_unused,
107 char *buf, size_t size)
109 return __bpf_strerror(buf, size);
112 static inline int bpf__strerror_load(struct bpf_object *obj __maybe_unused,
113 int err __maybe_unused,
114 char *buf, size_t size)
116 return __bpf_strerror(buf, size);