|
@@ -326,6 +326,11 @@ static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
|
|
|
if (ret < 0)
|
|
|
goto out_cleanup;
|
|
|
|
|
|
+ if (params.command == 'D') { /* it shows definition */
|
|
|
+ ret = show_probe_trace_events(pevs, npevs);
|
|
|
+ goto out_cleanup;
|
|
|
+ }
|
|
|
+
|
|
|
ret = apply_perf_probe_events(pevs, npevs);
|
|
|
if (ret < 0)
|
|
|
goto out_cleanup;
|
|
@@ -454,6 +459,14 @@ out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+#ifdef HAVE_DWARF_SUPPORT
|
|
|
+#define PROBEDEF_STR \
|
|
|
+ "[EVENT=]FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT [[NAME=]ARG ...]"
|
|
|
+#else
|
|
|
+#define PROBEDEF_STR "[EVENT=]FUNC[+OFF|%return] [[NAME=]ARG ...]"
|
|
|
+#endif
|
|
|
+
|
|
|
+
|
|
|
static int
|
|
|
__cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
{
|
|
@@ -479,13 +492,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
opt_set_filter_with_command, DEFAULT_LIST_FILTER),
|
|
|
OPT_CALLBACK('d', "del", NULL, "[GROUP:]EVENT", "delete a probe event.",
|
|
|
opt_set_filter_with_command),
|
|
|
- OPT_CALLBACK('a', "add", NULL,
|
|
|
-#ifdef HAVE_DWARF_SUPPORT
|
|
|
- "[EVENT=]FUNC[@SRC][+OFF|%return|:RL|;PT]|SRC:AL|SRC;PT"
|
|
|
- " [[NAME=]ARG ...]",
|
|
|
-#else
|
|
|
- "[EVENT=]FUNC[+OFF|%return] [[NAME=]ARG ...]",
|
|
|
-#endif
|
|
|
+ OPT_CALLBACK('a', "add", NULL, PROBEDEF_STR,
|
|
|
"probe point definition, where\n"
|
|
|
"\t\tGROUP:\tGroup name (optional)\n"
|
|
|
"\t\tEVENT:\tEvent name\n"
|
|
@@ -503,6 +510,9 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
"\t\tARG:\tProbe argument (kprobe-tracer argument format.)\n",
|
|
|
#endif
|
|
|
opt_add_probe_event),
|
|
|
+ OPT_CALLBACK('D', "definition", NULL, PROBEDEF_STR,
|
|
|
+ "Show trace event definition of given traceevent for k/uprobe_events.",
|
|
|
+ opt_add_probe_event),
|
|
|
OPT_BOOLEAN('f', "force", &probe_conf.force_add, "forcibly add events"
|
|
|
" with existing name"),
|
|
|
OPT_CALLBACK('L', "line", NULL,
|
|
@@ -548,6 +558,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
|
|
|
set_option_flag(options, 'a', "add", PARSE_OPT_EXCLUSIVE);
|
|
|
set_option_flag(options, 'd', "del", PARSE_OPT_EXCLUSIVE);
|
|
|
+ set_option_flag(options, 'D', "definition", PARSE_OPT_EXCLUSIVE);
|
|
|
set_option_flag(options, 'l', "list", PARSE_OPT_EXCLUSIVE);
|
|
|
#ifdef HAVE_DWARF_SUPPORT
|
|
|
set_option_flag(options, 'L', "line", PARSE_OPT_EXCLUSIVE);
|
|
@@ -644,6 +655,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
}
|
|
|
break;
|
|
|
case 'a':
|
|
|
+ case 'D':
|
|
|
/* Ensure the last given target is used */
|
|
|
if (params.target && !params.target_used) {
|
|
|
pr_err(" Error: -x/-m must follow the probe definitions.\n");
|