diff options
author | Masami Hiramatsu <mhiramat@redhat.com> | 2010-04-12 13:17:42 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-04-14 16:28:36 -0400 |
commit | 146a143948ed9e8b248c0ec59937f3e9e1bbc7e5 (patch) | |
tree | d43df31997010bd3650264a3c5325f20679614ac /tools/perf/builtin-probe.c | |
parent | b55a87ade3839c33ab94768a0b5955734073f987 (diff) |
perf probe: Remove die() from probe-event code
Remove die() and DIE_IF() code from util/probe-event.c since
these 'sudden death' in utility functions make reusing it from
other code (especially tui/gui) difficult.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <20100412171742.3790.33650.stgit@localhost6.localdomain6>
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-probe.c')
-rw-r--r-- | tools/perf/builtin-probe.c | 70 |
1 files changed, 48 insertions, 22 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index daf4668d2de0..64bc11a183bf 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
@@ -59,23 +59,25 @@ static struct { | |||
59 | 59 | ||
60 | 60 | ||
61 | /* Parse an event definition. Note that any error must die. */ | 61 | /* Parse an event definition. Note that any error must die. */ |
62 | static void parse_probe_event(const char *str) | 62 | static int parse_probe_event(const char *str) |
63 | { | 63 | { |
64 | struct perf_probe_event *pev = ¶ms.events[params.nevents]; | 64 | struct perf_probe_event *pev = ¶ms.events[params.nevents]; |
65 | int ret; | ||
65 | 66 | ||
66 | pr_debug("probe-definition(%d): %s\n", params.nevents, str); | 67 | pr_debug("probe-definition(%d): %s\n", params.nevents, str); |
67 | if (++params.nevents == MAX_PROBES) | 68 | if (++params.nevents == MAX_PROBES) |
68 | die("Too many probes (> %d) are specified.", MAX_PROBES); | 69 | die("Too many probes (> %d) are specified.", MAX_PROBES); |
69 | 70 | ||
70 | /* Parse a perf-probe command into event */ | 71 | /* Parse a perf-probe command into event */ |
71 | parse_perf_probe_command(str, pev); | 72 | ret = parse_perf_probe_command(str, pev); |
72 | |||
73 | pr_debug("%d arguments\n", pev->nargs); | 73 | pr_debug("%d arguments\n", pev->nargs); |
74 | |||
75 | return ret; | ||
74 | } | 76 | } |
75 | 77 | ||
76 | static void parse_probe_event_argv(int argc, const char **argv) | 78 | static int parse_probe_event_argv(int argc, const char **argv) |
77 | { | 79 | { |
78 | int i, len; | 80 | int i, len, ret; |
79 | char *buf; | 81 | char *buf; |
80 | 82 | ||
81 | /* Bind up rest arguments */ | 83 | /* Bind up rest arguments */ |
@@ -86,16 +88,18 @@ static void parse_probe_event_argv(int argc, const char **argv) | |||
86 | len = 0; | 88 | len = 0; |
87 | for (i = 0; i < argc; i++) | 89 | for (i = 0; i < argc; i++) |
88 | len += sprintf(&buf[len], "%s ", argv[i]); | 90 | len += sprintf(&buf[len], "%s ", argv[i]); |
89 | parse_probe_event(buf); | 91 | ret = parse_probe_event(buf); |
90 | free(buf); | 92 | free(buf); |
93 | return ret; | ||
91 | } | 94 | } |
92 | 95 | ||
93 | static int opt_add_probe_event(const struct option *opt __used, | 96 | static int opt_add_probe_event(const struct option *opt __used, |
94 | const char *str, int unset __used) | 97 | const char *str, int unset __used) |
95 | { | 98 | { |
96 | if (str) | 99 | if (str) |
97 | parse_probe_event(str); | 100 | return parse_probe_event(str); |
98 | return 0; | 101 | else |
102 | return 0; | ||
99 | } | 103 | } |
100 | 104 | ||
101 | static int opt_del_probe_event(const struct option *opt __used, | 105 | static int opt_del_probe_event(const struct option *opt __used, |
@@ -113,11 +117,14 @@ static int opt_del_probe_event(const struct option *opt __used, | |||
113 | static int opt_show_lines(const struct option *opt __used, | 117 | static int opt_show_lines(const struct option *opt __used, |
114 | const char *str, int unset __used) | 118 | const char *str, int unset __used) |
115 | { | 119 | { |
120 | int ret = 0; | ||
121 | |||
116 | if (str) | 122 | if (str) |
117 | parse_line_range_desc(str, ¶ms.line_range); | 123 | ret = parse_line_range_desc(str, ¶ms.line_range); |
118 | INIT_LIST_HEAD(¶ms.line_range.line_list); | 124 | INIT_LIST_HEAD(¶ms.line_range.line_list); |
119 | params.show_lines = true; | 125 | params.show_lines = true; |
120 | return 0; | 126 | |
127 | return ret; | ||
121 | } | 128 | } |
122 | #endif | 129 | #endif |
123 | 130 | ||
@@ -178,6 +185,8 @@ static const struct option options[] = { | |||
178 | 185 | ||
179 | int cmd_probe(int argc, const char **argv, const char *prefix __used) | 186 | int cmd_probe(int argc, const char **argv, const char *prefix __used) |
180 | { | 187 | { |
188 | int ret; | ||
189 | |||
181 | argc = parse_options(argc, argv, options, probe_usage, | 190 | argc = parse_options(argc, argv, options, probe_usage, |
182 | PARSE_OPT_STOP_AT_NON_OPTION); | 191 | PARSE_OPT_STOP_AT_NON_OPTION); |
183 | if (argc > 0) { | 192 | if (argc > 0) { |
@@ -185,7 +194,11 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
185 | pr_warning(" Error: '-' is not supported.\n"); | 194 | pr_warning(" Error: '-' is not supported.\n"); |
186 | usage_with_options(probe_usage, options); | 195 | usage_with_options(probe_usage, options); |
187 | } | 196 | } |
188 | parse_probe_event_argv(argc, argv); | 197 | ret = parse_probe_event_argv(argc, argv); |
198 | if (ret < 0) { | ||
199 | pr_err(" Error: Parse Error. (%d)\n", ret); | ||
200 | return ret; | ||
201 | } | ||
189 | } | 202 | } |
190 | 203 | ||
191 | if ((!params.nevents && !params.dellist && !params.list_events && | 204 | if ((!params.nevents && !params.dellist && !params.list_events && |
@@ -197,16 +210,18 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
197 | 210 | ||
198 | if (params.list_events) { | 211 | if (params.list_events) { |
199 | if (params.nevents != 0 || params.dellist) { | 212 | if (params.nevents != 0 || params.dellist) { |
200 | pr_warning(" Error: Don't use --list with" | 213 | pr_err(" Error: Don't use --list with --add/--del.\n"); |
201 | " --add/--del.\n"); | ||
202 | usage_with_options(probe_usage, options); | 214 | usage_with_options(probe_usage, options); |
203 | } | 215 | } |
204 | if (params.show_lines) { | 216 | if (params.show_lines) { |
205 | pr_warning(" Error: Don't use --list with --line.\n"); | 217 | pr_err(" Error: Don't use --list with --line.\n"); |
206 | usage_with_options(probe_usage, options); | 218 | usage_with_options(probe_usage, options); |
207 | } | 219 | } |
208 | show_perf_probe_events(); | 220 | ret = show_perf_probe_events(); |
209 | return 0; | 221 | if (ret < 0) |
222 | pr_err(" Error: Failed to show event list. (%d)\n", | ||
223 | ret); | ||
224 | return ret; | ||
210 | } | 225 | } |
211 | 226 | ||
212 | #ifdef DWARF_SUPPORT | 227 | #ifdef DWARF_SUPPORT |
@@ -217,19 +232,30 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
217 | usage_with_options(probe_usage, options); | 232 | usage_with_options(probe_usage, options); |
218 | } | 233 | } |
219 | 234 | ||
220 | show_line_range(¶ms.line_range); | 235 | ret = show_line_range(¶ms.line_range); |
221 | return 0; | 236 | if (ret < 0) |
237 | pr_err(" Error: Failed to show lines. (%d)\n", ret); | ||
238 | return ret; | ||
222 | } | 239 | } |
223 | #endif | 240 | #endif |
224 | 241 | ||
225 | if (params.dellist) { | 242 | if (params.dellist) { |
226 | del_perf_probe_events(params.dellist); | 243 | ret = del_perf_probe_events(params.dellist); |
227 | strlist__delete(params.dellist); | 244 | strlist__delete(params.dellist); |
228 | if (params.nevents == 0) | 245 | if (ret < 0) { |
229 | return 0; | 246 | pr_err(" Error: Failed to delete events. (%d)\n", ret); |
247 | return ret; | ||
248 | } | ||
230 | } | 249 | } |
231 | 250 | ||
232 | add_perf_probe_events(params.events, params.nevents, params.force_add); | 251 | if (params.nevents) { |
252 | ret = add_perf_probe_events(params.events, params.nevents, | ||
253 | params.force_add); | ||
254 | if (ret < 0) { | ||
255 | pr_err(" Error: Failed to add events. (%d)\n", ret); | ||
256 | return ret; | ||
257 | } | ||
258 | } | ||
233 | return 0; | 259 | return 0; |
234 | } | 260 | } |
235 | 261 | ||