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>
This commit is contained in:
parent
8030c5f5a5
commit
46ab49267d
|
@ -65,8 +65,8 @@ static struct {
|
||||||
|
|
||||||
#define semantic_error(msg ...) die("Semantic error :" msg)
|
#define semantic_error(msg ...) die("Semantic error :" msg)
|
||||||
|
|
||||||
static int parse_probepoint(const struct option *opt __used,
|
/* Parse a probe point. Note that any error must die. */
|
||||||
const char *str, int unset __used)
|
static void parse_probepoint(const char *str)
|
||||||
{
|
{
|
||||||
char *argv[MAX_PROBE_ARGS + 2]; /* Event + probe + args */
|
char *argv[MAX_PROBE_ARGS + 2]; /* Event + probe + args */
|
||||||
int argc, i;
|
int argc, i;
|
||||||
|
@ -75,9 +75,6 @@ static int parse_probepoint(const struct option *opt __used,
|
||||||
char **event = &session.events[session.nr_probe];
|
char **event = &session.events[session.nr_probe];
|
||||||
int retp = 0;
|
int retp = 0;
|
||||||
|
|
||||||
if (!str) /* The end of probe points */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
pr_debug("probe-definition(%d): %s\n", session.nr_probe, str);
|
pr_debug("probe-definition(%d): %s\n", session.nr_probe, str);
|
||||||
if (++session.nr_probe == MAX_PROBES)
|
if (++session.nr_probe == MAX_PROBES)
|
||||||
semantic_error("Too many probes");
|
semantic_error("Too many probes");
|
||||||
|
@ -176,6 +173,13 @@ static int parse_probepoint(const struct option *opt __used,
|
||||||
}
|
}
|
||||||
|
|
||||||
pr_debug("%d arguments\n", pp->nr_args);
|
pr_debug("%d arguments\n", pp->nr_args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int opt_add_probepoint(const struct option *opt __used,
|
||||||
|
const char *str, int unset __used)
|
||||||
|
{
|
||||||
|
if (str)
|
||||||
|
parse_probepoint(str);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +215,8 @@ static int open_default_vmlinux(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char * const probe_usage[] = {
|
static const char * const probe_usage[] = {
|
||||||
"perf probe [<options>] -P 'PROBEDEF' [-P 'PROBEDEF' ...]",
|
"perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]",
|
||||||
|
"perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -222,7 +227,7 @@ static const struct option options[] = {
|
||||||
OPT_STRING('k', "vmlinux", &session.vmlinux, "file",
|
OPT_STRING('k', "vmlinux", &session.vmlinux, "file",
|
||||||
"vmlinux/module pathname"),
|
"vmlinux/module pathname"),
|
||||||
#endif
|
#endif
|
||||||
OPT_CALLBACK('P', "probe", NULL,
|
OPT_CALLBACK('a', "add", NULL,
|
||||||
#ifdef NO_LIBDWARF
|
#ifdef NO_LIBDWARF
|
||||||
"p|r:[GRP/]NAME FUNC[+OFFS] [ARG ...]",
|
"p|r:[GRP/]NAME FUNC[+OFFS] [ARG ...]",
|
||||||
#else
|
#else
|
||||||
|
@ -243,7 +248,7 @@ static const struct option options[] = {
|
||||||
"\t\tARG:\tProbe argument (local variable name or\n"
|
"\t\tARG:\tProbe argument (local variable name or\n"
|
||||||
#endif
|
#endif
|
||||||
"\t\t\tkprobe-tracer argument format is supported.)\n",
|
"\t\t\tkprobe-tracer argument format is supported.)\n",
|
||||||
parse_probepoint),
|
opt_add_probepoint),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -296,8 +301,11 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used)
|
||||||
char buf[MAX_CMDLEN];
|
char buf[MAX_CMDLEN];
|
||||||
|
|
||||||
argc = parse_options(argc, argv, options, probe_usage,
|
argc = parse_options(argc, argv, options, probe_usage,
|
||||||
PARSE_OPT_STOP_AT_NON_OPTION);
|
PARSE_OPT_STOP_AT_NON_OPTION);
|
||||||
if (argc || session.nr_probe == 0)
|
for (i = 0; i < argc; i++)
|
||||||
|
parse_probe_event(argv[i]);
|
||||||
|
|
||||||
|
if (session.nr_probe == 0)
|
||||||
usage_with_options(probe_usage, options);
|
usage_with_options(probe_usage, options);
|
||||||
|
|
||||||
#ifdef NO_LIBDWARF
|
#ifdef NO_LIBDWARF
|
||||||
|
|
Loading…
Reference in New Issue