diff options
author | Wang Nan <wangnan0@huawei.com> | 2015-11-16 07:10:06 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-11-18 15:51:03 -0500 |
commit | 5dbd16c0c9d17ab1ab2226a5926482c26c0287ed (patch) | |
tree | c1e2a394a24fae044594c6f7131ae7162e0fb548 /tools/perf | |
parent | 361f2b1d1d7231b8685d990b886f599378a4d5a5 (diff) |
perf bpf: Allow attaching BPF programs to modules symbols
By extending the syntax of BPF object section names, this patch allows
users to attach BPF programs to symbols in modules. For example:
SEC("module=i915;"
"parse_cmds=i915_parse_cmds")
int parse_cmds(void *ctx)
{
return 1;
}
The implementation is very simple: like what 'perf probe' does, for module,
fill 'uprobe' field in 'struct perf_probe_event'. Other parts will be done
automatically.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: David Ahern <dsahern@gmail.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kaixu Xia <xiakaixu@huawei.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1447675815-166222-5-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf')
-rw-r--r-- | tools/perf/util/bpf-loader.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index 84169d6f2585..d0f02ed93804 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c | |||
@@ -119,6 +119,16 @@ config__exec(const char *value, struct perf_probe_event *pev) | |||
119 | return 0; | 119 | return 0; |
120 | } | 120 | } |
121 | 121 | ||
122 | static int | ||
123 | config__module(const char *value, struct perf_probe_event *pev) | ||
124 | { | ||
125 | pev->uprobes = false; | ||
126 | pev->target = strdup(value); | ||
127 | if (!pev->target) | ||
128 | return -ENOMEM; | ||
129 | return 0; | ||
130 | } | ||
131 | |||
122 | static struct { | 132 | static struct { |
123 | const char *key; | 133 | const char *key; |
124 | const char *usage; | 134 | const char *usage; |
@@ -131,6 +141,12 @@ static struct { | |||
131 | .desc = "Set uprobe target", | 141 | .desc = "Set uprobe target", |
132 | .func = config__exec, | 142 | .func = config__exec, |
133 | }, | 143 | }, |
144 | { | ||
145 | .key = "module", | ||
146 | .usage = "module=<module name> ", | ||
147 | .desc = "Set kprobe module", | ||
148 | .func = config__module, | ||
149 | } | ||
134 | }; | 150 | }; |
135 | 151 | ||
136 | static int | 152 | static int |