Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46ab4926 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Ingo Molnar
Browse files

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: default avatarMasami 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: default avatarIngo Molnar <mingo@elte.hu>
parent 8030c5f5
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ static struct {

#define semantic_error(msg ...) die("Semantic error :" msg)

static int parse_probepoint(const struct option *opt __used,
			    const char *str, int unset __used)
/* Parse a probe point. Note that any error must die. */
static void parse_probepoint(const char *str)
{
	char *argv[MAX_PROBE_ARGS + 2];	/* Event + probe + args */
	int argc, i;
@@ -75,9 +75,6 @@ static int parse_probepoint(const struct option *opt __used,
	char **event = &session.events[session.nr_probe];
	int retp = 0;

	if (!str)	/* The end of probe points */
		return 0;

	pr_debug("probe-definition(%d): %s\n", session.nr_probe, str);
	if (++session.nr_probe == MAX_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);
}

static int opt_add_probepoint(const struct option *opt __used,
			      const char *str, int unset __used)
{
	if (str)
		parse_probepoint(str);
	return 0;
}

@@ -211,7 +215,8 @@ static int open_default_vmlinux(void)
#endif

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
};

@@ -222,7 +227,7 @@ static const struct option options[] = {
	OPT_STRING('k', "vmlinux", &session.vmlinux, "file",
		"vmlinux/module pathname"),
#endif
	OPT_CALLBACK('P', "probe", NULL,
	OPT_CALLBACK('a', "add", NULL,
#ifdef NO_LIBDWARF
		"p|r:[GRP/]NAME FUNC[+OFFS] [ARG ...]",
#else
@@ -243,7 +248,7 @@ static const struct option options[] = {
		"\t\tARG:\tProbe argument (local variable name or\n"
#endif
		"\t\t\tkprobe-tracer argument format is supported.)\n",
		parse_probepoint),
		opt_add_probepoint),
	OPT_END()
};

@@ -297,7 +302,10 @@ int cmd_probe(int argc, const char **argv, const char *prefix __used)

	argc = parse_options(argc, argv, options, probe_usage,
			     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);

#ifdef NO_LIBDWARF