diff options
author | Masami Hiramatsu <mhiramat@redhat.com> | 2009-10-16 20:08:01 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-10-17 03:54:00 -0400 |
commit | 074fc0e4b3f5d24306c2995f2f3b0bd4759e8aeb (patch) | |
tree | 485c1ac28a03ed0558eb443e1212eaf6ceee2c63 /tools/perf/builtin-probe.c | |
parent | 4c20194c2de151bca14224ae384b47abf7636a95 (diff) |
perf: Use die() for error cases in perf-probe
Use die() for exiting perf-probe with errors. This replaces
perror_exit(), msg_exit() and fprintf()+exit() with die(), and
uses die() in semantic_error().
This also renames 'die' local variables to 'dw_die' for avoiding
name confliction.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20091017000801.16556.46866.stgit@dhcp-100-2-132.bos.redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/builtin-probe.c')
-rw-r--r-- | tools/perf/builtin-probe.c | 47 |
1 files changed, 14 insertions, 33 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 73c883b715cc..a1467d12547a 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
@@ -49,6 +49,7 @@ const char *default_search_path[NR_SEARCH_PATH] = { | |||
49 | 49 | ||
50 | #define MAX_PATH_LEN 256 | 50 | #define MAX_PATH_LEN 256 |
51 | #define MAX_PROBES 128 | 51 | #define MAX_PROBES 128 |
52 | #define MAX_PROBE_ARGS 128 | ||
52 | 53 | ||
53 | /* Session management structure */ | 54 | /* Session management structure */ |
54 | static struct { | 55 | static struct { |
@@ -60,19 +61,7 @@ static struct { | |||
60 | char *events[MAX_PROBES]; | 61 | char *events[MAX_PROBES]; |
61 | } session; | 62 | } session; |
62 | 63 | ||
63 | static void semantic_error(const char *msg) | 64 | #define semantic_error(msg ...) die("Semantic error :" msg) |
64 | { | ||
65 | fprintf(stderr, "Semantic error: %s\n", msg); | ||
66 | exit(1); | ||
67 | } | ||
68 | |||
69 | static void perror_exit(const char *msg) | ||
70 | { | ||
71 | perror(msg); | ||
72 | exit(1); | ||
73 | } | ||
74 | |||
75 | #define MAX_PROBE_ARGS 128 | ||
76 | 65 | ||
77 | static int parse_probepoint(const struct option *opt __used, | 66 | static int parse_probepoint(const struct option *opt __used, |
78 | const char *str, int unset __used) | 67 | const char *str, int unset __used) |
@@ -109,7 +98,7 @@ static int parse_probepoint(const struct option *opt __used, | |||
109 | /* Duplicate the argument */ | 98 | /* Duplicate the argument */ |
110 | argv[argc] = strndup(s, str - s); | 99 | argv[argc] = strndup(s, str - s); |
111 | if (argv[argc] == NULL) | 100 | if (argv[argc] == NULL) |
112 | perror_exit("strndup"); | 101 | die("strndup"); |
113 | if (++argc == MAX_PROBE_ARGS) | 102 | if (++argc == MAX_PROBE_ARGS) |
114 | semantic_error("Too many arguments"); | 103 | semantic_error("Too many arguments"); |
115 | debug("argv[%d]=%s\n", argc, argv[argc - 1]); | 104 | debug("argv[%d]=%s\n", argc, argv[argc - 1]); |
@@ -171,7 +160,7 @@ static int parse_probepoint(const struct option *opt __used, | |||
171 | if (pp->nr_args > 0) { | 160 | if (pp->nr_args > 0) { |
172 | pp->args = (char **)malloc(sizeof(char *) * pp->nr_args); | 161 | pp->args = (char **)malloc(sizeof(char *) * pp->nr_args); |
173 | if (!pp->args) | 162 | if (!pp->args) |
174 | perror_exit("malloc"); | 163 | die("malloc"); |
175 | memcpy(pp->args, &argv[2], sizeof(char *) * pp->nr_args); | 164 | memcpy(pp->args, &argv[2], sizeof(char *) * pp->nr_args); |
176 | } | 165 | } |
177 | 166 | ||
@@ -260,7 +249,7 @@ static int write_new_event(int fd, const char *buf) | |||
260 | printf("Adding new event: %s\n", buf); | 249 | printf("Adding new event: %s\n", buf); |
261 | ret = write(fd, buf, strlen(buf)); | 250 | ret = write(fd, buf, strlen(buf)); |
262 | if (ret <= 0) | 251 | if (ret <= 0) |
263 | perror("Error: Failed to create event"); | 252 | die("failed to create event."); |
264 | 253 | ||
265 | return ret; | 254 | return ret; |
266 | } | 255 | } |
@@ -273,7 +262,7 @@ static int synthesize_probepoint(struct probe_point *pp) | |||
273 | int i, len, ret; | 262 | int i, len, ret; |
274 | pp->probes[0] = buf = (char *)calloc(MAX_CMDLEN, sizeof(char)); | 263 | pp->probes[0] = buf = (char *)calloc(MAX_CMDLEN, sizeof(char)); |
275 | if (!buf) | 264 | if (!buf) |
276 | perror_exit("calloc"); | 265 | die("calloc"); |
277 | ret = snprintf(buf, MAX_CMDLEN, "%s+%d", pp->function, pp->offset); | 266 | ret = snprintf(buf, MAX_CMDLEN, "%s+%d", pp->function, pp->offset); |
278 | if (ret <= 0 || ret >= MAX_CMDLEN) | 267 | if (ret <= 0 || ret >= MAX_CMDLEN) |
279 | goto error; | 268 | goto error; |
@@ -322,10 +311,8 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
322 | ret = synthesize_probepoint(&session.probes[j]); | 311 | ret = synthesize_probepoint(&session.probes[j]); |
323 | if (ret == -E2BIG) | 312 | if (ret == -E2BIG) |
324 | semantic_error("probe point is too long."); | 313 | semantic_error("probe point is too long."); |
325 | else if (ret < 0) { | 314 | else if (ret < 0) |
326 | perror("snprintf"); | 315 | die("snprintf"); |
327 | return -1; | ||
328 | } | ||
329 | } | 316 | } |
330 | 317 | ||
331 | #ifndef NO_LIBDWARF | 318 | #ifndef NO_LIBDWARF |
@@ -336,10 +323,8 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
336 | fd = open(session.vmlinux, O_RDONLY); | 323 | fd = open(session.vmlinux, O_RDONLY); |
337 | else | 324 | else |
338 | fd = open_default_vmlinux(); | 325 | fd = open_default_vmlinux(); |
339 | if (fd < 0) { | 326 | if (fd < 0) |
340 | perror("vmlinux/module file open"); | 327 | die("vmlinux/module file open"); |
341 | return -1; | ||
342 | } | ||
343 | 328 | ||
344 | /* Searching probe points */ | 329 | /* Searching probe points */ |
345 | for (j = 0; j < session.nr_probe; j++) { | 330 | for (j = 0; j < session.nr_probe; j++) { |
@@ -349,10 +334,8 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used) | |||
349 | 334 | ||
350 | lseek(fd, SEEK_SET, 0); | 335 | lseek(fd, SEEK_SET, 0); |
351 | ret = find_probepoint(fd, pp); | 336 | ret = find_probepoint(fd, pp); |
352 | if (ret <= 0) { | 337 | if (ret <= 0) |
353 | fprintf(stderr, "Error: No probe point found.\n"); | 338 | die("No probe point found.\n"); |
354 | return -1; | ||
355 | } | ||
356 | debug("probe event %s found\n", session.events[j]); | 339 | debug("probe event %s found\n", session.events[j]); |
357 | } | 340 | } |
358 | close(fd); | 341 | close(fd); |
@@ -363,10 +346,8 @@ setup_probes: | |||
363 | /* Settng up probe points */ | 346 | /* Settng up probe points */ |
364 | snprintf(buf, MAX_CMDLEN, "%s/../kprobe_events", debugfs_path); | 347 | snprintf(buf, MAX_CMDLEN, "%s/../kprobe_events", debugfs_path); |
365 | fd = open(buf, O_WRONLY, O_APPEND); | 348 | fd = open(buf, O_WRONLY, O_APPEND); |
366 | if (fd < 0) { | 349 | if (fd < 0) |
367 | perror("kprobe_events open"); | 350 | die("kprobe_events open"); |
368 | return -1; | ||
369 | } | ||
370 | for (j = 0; j < session.nr_probe; j++) { | 351 | for (j = 0; j < session.nr_probe; j++) { |
371 | pp = &session.probes[j]; | 352 | pp = &session.probes[j]; |
372 | if (pp->found == 1) { | 353 | if (pp->found == 1) { |