aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-probe.c
diff options
context:
space:
mode:
authorMasami Hiramatsu <mhiramat@redhat.com>2009-10-27 16:43:02 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-29 03:47:48 -0400
commit46ab49267d338eb5056d0077e16346509b9e9284 (patch)
tree5d7e108e3ad8d157e665eac53fa43d50b37f2428 /tools/perf/builtin-probe.c
parent8030c5f5a57e018fcdeb1f395d7adc123b48ced6 (diff)
perf/probes: Improve command-line option of perf-probe
Change command-line option from -P to --add, and accepting probes without --add too. perf probe --add "probe-define" or, just: perf probe "probe-define" Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Jim Keniston <jkenisto@us.ibm.com> Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Frank Ch. Eigler <fche@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jason Baron <jbaron@redhat.com> Cc: K.Prasad <prasad@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com> LKML-Reference: <20091027204301.30545.48600.stgit@harusame> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/builtin-probe.c')
-rw-r--r--tools/perf/builtin-probe.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
index dcb406c7f82d..3370dabed15d 100644
--- a/tools/perf/builtin-probe.c
+++ b/tools/perf/builtin-probe.c
@@ -65,8 +65,8 @@ static struct {
65 65
66#define semantic_error(msg ...) die("Semantic error :" msg) 66#define semantic_error(msg ...) die("Semantic error :" msg)
67 67
68static int parse_probepoint(const struct option *opt __used, 68/* Parse a probe point. Note that any error must die. */
69 const char *str, int unset __used) 69static void parse_probepoint(const char *str)
70{ 70{
71 char *argv[MAX_PROBE_ARGS + 2]; /* Event + probe + args */ 71 char *argv[MAX_PROBE_ARGS + 2]; /* Event + probe + args */
72 int argc, i; 72 int argc, i;
@@ -75,9 +75,6 @@ static int parse_probepoint(const struct option *opt __used,
75 char **event = &session.events[session.nr_probe]; 75 char **event = &session.events[session.nr_probe];
76 int retp = 0; 76 int retp = 0;
77 77
78 if (!str) /* The end of probe points */
79 return 0;
80
81 pr_debug("probe-definition(%d): %s\n", session.nr_probe, str); 78 pr_debug("probe-definition(%d): %s\n", session.nr_probe, str);
82 if (++session.nr_probe == MAX_PROBES) 79 if (++session.nr_probe == MAX_PROBES)
83 semantic_error("Too many probes"); 80 semantic_error("Too many probes");
@@ -176,6 +173,13 @@ static int parse_probepoint(const struct option *opt __used,
176 } 173 }
177 174
178 pr_debug("%d arguments\n", pp->nr_args); 175 pr_debug("%d arguments\n", pp->nr_args);
176}
177
178static int opt_add_probepoint(const struct option *opt __used,
179 const char *str, int unset __used)
180{
181 if (str)
182 parse_probepoint(str);
179 return 0; 183 return 0;
180} 184}
181 185
@@ -211,7 +215,8 @@ static int open_default_vmlinux(void)
211#endif 215#endif
212 216
213static const char * const probe_usage[] = { 217static const char * const probe_usage[] = {
214 "perf probe [<options>] -P 'PROBEDEF' [-P 'PROBEDEF' ...]", 218 "perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]",
219 "perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]",
215 NULL 220 NULL
216}; 221};
217 222
@@ -222,7 +227,7 @@ static const struct option options[] = {
222 OPT_STRING('k', "vmlinux", &session.vmlinux, "file", 227 OPT_STRING('k', "vmlinux", &session.vmlinux, "file",
223 "vmlinux/module pathname"), 228 "vmlinux/module pathname"),
224#endif 229#endif
225 OPT_CALLBACK('P', "probe", NULL, 230 OPT_CALLBACK('a', "add", NULL,
226#ifdef NO_LIBDWARF 231#ifdef NO_LIBDWARF
227 "p|r:[GRP/]NAME FUNC[+OFFS] [ARG ...]", 232 "p|r:[GRP/]NAME FUNC[+OFFS] [ARG ...]",
228#else 233#else
@@ -243,7 +248,7 @@ static const struct option options[] = {
243 "\t\tARG:\tProbe argument (local variable name or\n" 248 "\t\tARG:\tProbe argument (local variable name or\n"
244#endif 249#endif
245 "\t\t\tkprobe-tracer argument format is supported.)\n", 250 "\t\t\tkprobe-tracer argument format is supported.)\n",
246 parse_probepoint), 251 opt_add_probepoint),
247 OPT_END() 252 OPT_END()
248}; 253};
249 254
@@ -296,8 +301,11 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used)
296 char buf[MAX_CMDLEN]; 301 char buf[MAX_CMDLEN];
297 302
298 argc = parse_options(argc, argv, options, probe_usage, 303 argc = parse_options(argc, argv, options, probe_usage,
299 PARSE_OPT_STOP_AT_NON_OPTION); 304 PARSE_OPT_STOP_AT_NON_OPTION);
300 if (argc || session.nr_probe == 0) 305 for (i = 0; i < argc; i++)
306 parse_probe_event(argv[i]);
307
308 if (session.nr_probe == 0)
301 usage_with_options(probe_usage, options); 309 usage_with_options(probe_usage, options);
302 310
303#ifdef NO_LIBDWARF 311#ifdef NO_LIBDWARF