aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMasami Hiramatsu <mhiramat@kernel.org>2016-07-12 06:05:46 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-07-13 22:09:09 -0400
commit7e9fca51fbf8430e27fb6b29299eda575e3f00cf (patch)
treecf8e5bdaef77a195c8057ba19f0d28802d7f4e40
parenta598180aa1279bac4d24dfc85cd2d78553c4210d (diff)
perf probe: Support a special SDT probe format
Support a special SDT probe format which can omit the '%' prefix only if the SDT group name starts with "sdt_". So, for example both of "%sdt_libc:setjump" and "sdt_libc:setjump" are acceptable for perf probe --add. E.g. without this: # perf probe -a sdt_libc:setjmp Semantic error :There is non-digit char in line number. ... With this: # perf probe -a sdt_libc:setjmp Added new event: sdt_libc:setjmp (on %setjmp in /usr/lib64/libc-2.20.so) You can now use it in all perf tools, such as: perf record -e sdt_libc:setjmp -aR sleep 1 Suggested-by: Brendan Gregg <brendan.d.gregg@gmail.com> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Hemant Kumar <hemant@linux.vnet.ibm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/146831794674.17065.13359473252168740430.stgit@devbox Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r--tools/perf/Documentation/perf-probe.txt4
-rw-r--r--tools/perf/util/probe-event.c12
2 files changed, 13 insertions, 3 deletions
diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt
index 39e387042098..736da44596e4 100644
--- a/tools/perf/Documentation/perf-probe.txt
+++ b/tools/perf/Documentation/perf-probe.txt
@@ -152,7 +152,9 @@ Probe points are defined by following syntax.
152 [[GROUP:]EVENT=]SRC;PTN [ARG ...] 152 [[GROUP:]EVENT=]SRC;PTN [ARG ...]
153 153
154 4) Pre-defined SDT events or cached event with name 154 4) Pre-defined SDT events or cached event with name
155 %[PROVIDER:]SDTEVENT 155 %[sdt_PROVIDER:]SDTEVENT
156 or,
157 sdt_PROVIDER:SDTEVENT
156 158
157'EVENT' specifies the name of new event, if omitted, it will be set the name of the probed function. You can also specify a group name by 'GROUP', if omitted, set 'probe' is used for kprobe and 'probe_<bin>' is used for uprobe. 159'EVENT' specifies the name of new event, if omitted, it will be set the name of the probed function. You can also specify a group name by 'GROUP', if omitted, set 'probe' is used for kprobe and 'probe_<bin>' is used for uprobe.
158Note that using existing group name can conflict with other events. Especially, using the group name reserved for kernel modules can hide embedded events in the 160Note that using existing group name can conflict with other events. Especially, using the group name reserved for kernel modules can hide embedded events in the
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index f12081e48a32..d4f8835c0a27 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -1243,9 +1243,17 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
1243 if (!arg) 1243 if (!arg)
1244 return -EINVAL; 1244 return -EINVAL;
1245 1245
1246 if (arg[0] == '%') { 1246 /*
1247 * If the probe point starts with '%',
1248 * or starts with "sdt_" and has a ':' but no '=',
1249 * then it should be a SDT/cached probe point.
1250 */
1251 if (arg[0] == '%' ||
1252 (!strncmp(arg, "sdt_", 4) &&
1253 !!strchr(arg, ':') && !strchr(arg, '='))) {
1247 pev->sdt = true; 1254 pev->sdt = true;
1248 arg++; 1255 if (arg[0] == '%')
1256 arg++;
1249 } 1257 }
1250 1258
1251 ptr = strpbrk(arg, ";=@+%"); 1259 ptr = strpbrk(arg, ";=@+%");