diff options
Diffstat (limited to 'tools/perf/builtin-probe.c')
-rw-r--r-- | tools/perf/builtin-probe.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index bf20df2e816d..b5d15cf25471 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
@@ -62,6 +62,8 @@ static struct { | |||
62 | struct probe_point probes[MAX_PROBES]; | 62 | struct probe_point probes[MAX_PROBES]; |
63 | } session; | 63 | } session; |
64 | 64 | ||
65 | static bool listing; | ||
66 | |||
65 | /* Parse an event definition. Note that any error must die. */ | 67 | /* Parse an event definition. Note that any error must die. */ |
66 | static void parse_probe_event(const char *str) | 68 | static void parse_probe_event(const char *str) |
67 | { | 69 | { |
@@ -119,6 +121,7 @@ static int open_default_vmlinux(void) | |||
119 | static const char * const probe_usage[] = { | 121 | static const char * const probe_usage[] = { |
120 | "perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]", | 122 | "perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]", |
121 | "perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]", | 123 | "perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]", |
124 | "perf probe --list", | ||
122 | NULL | 125 | NULL |
123 | }; | 126 | }; |
124 | 127 | ||
@@ -129,6 +132,7 @@ static const struct option options[] = { | |||
129 | OPT_STRING('k', "vmlinux", &session.vmlinux, "file", | 132 | OPT_STRING('k', "vmlinux", &session.vmlinux, "file", |
130 | "vmlinux/module pathname"), | 133 | "vmlinux/module pathname"), |
131 | #endif | 134 | #endif |
135 | OPT_BOOLEAN('l', "list", &listing, "list up current probes"), | ||
132 | OPT_CALLBACK('a', "add", NULL, | 136 | OPT_CALLBACK('a', "add", NULL, |
133 | #ifdef NO_LIBDWARF | 137 | #ifdef NO_LIBDWARF |
134 | "FUNC[+OFFS|%return] [ARG ...]", | 138 | "FUNC[+OFFS|%return] [ARG ...]", |
@@ -164,9 +168,15 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
164 | for (i = 0; i < argc; i++) | 168 | for (i = 0; i < argc; i++) |
165 | parse_probe_event(argv[i]); | 169 | parse_probe_event(argv[i]); |
166 | 170 | ||
167 | if (session.nr_probe == 0) | 171 | if ((session.nr_probe == 0 && !listing) || |
172 | (session.nr_probe != 0 && listing)) | ||
168 | usage_with_options(probe_usage, options); | 173 | usage_with_options(probe_usage, options); |
169 | 174 | ||
175 | if (listing) { | ||
176 | show_perf_probe_events(); | ||
177 | return 0; | ||
178 | } | ||
179 | |||
170 | if (session.need_dwarf) | 180 | if (session.need_dwarf) |
171 | #ifdef NO_LIBDWARF | 181 | #ifdef NO_LIBDWARF |
172 | die("Debuginfo-analysis is not supported"); | 182 | die("Debuginfo-analysis is not supported"); |