aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-probe.c
diff options
context:
space:
mode:
authorMasami Hiramatsu <mhiramat@redhat.com>2010-04-12 13:17:42 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2010-04-14 16:28:36 -0400
commit146a143948ed9e8b248c0ec59937f3e9e1bbc7e5 (patch)
treed43df31997010bd3650264a3c5325f20679614ac /tools/perf/builtin-probe.c
parentb55a87ade3839c33ab94768a0b5955734073f987 (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.c70
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. */
62static void parse_probe_event(const char *str) 62static int parse_probe_event(const char *str)
63{ 63{
64 struct perf_probe_event *pev = &params.events[params.nevents]; 64 struct perf_probe_event *pev = &params.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
76static void parse_probe_event_argv(int argc, const char **argv) 78static 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
93static int opt_add_probe_event(const struct option *opt __used, 96static 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
101static int opt_del_probe_event(const struct option *opt __used, 105static 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,
113static int opt_show_lines(const struct option *opt __used, 117static 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, &params.line_range); 123 ret = parse_line_range_desc(str, &params.line_range);
118 INIT_LIST_HEAD(&params.line_range.line_list); 124 INIT_LIST_HEAD(&params.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
179int cmd_probe(int argc, const char **argv, const char *prefix __used) 186int 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(&params.line_range); 235 ret = show_line_range(&params.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