diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2016-07-12 06:05:46 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-07-13 22:09:09 -0400 |
commit | 7e9fca51fbf8430e27fb6b29299eda575e3f00cf (patch) | |
tree | cf8e5bdaef77a195c8057ba19f0d28802d7f4e40 | |
parent | a598180aa1279bac4d24dfc85cd2d78553c4210d (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.txt | 4 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 12 |
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. |
158 | Note 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 | 160 | Note 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, ";=@+%"); |