diff options
author | Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | 2011-02-10 04:08:10 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-02-16 14:03:23 -0500 |
commit | e116dfa1c357da49f55e1555767ec991225a8321 (patch) | |
tree | 58399140eb095b3550b5593c4e6348983208604c /tools | |
parent | 4187e262bc90369ba581ee28ec74ed416618889e (diff) |
perf probe: Support function@filename syntax for --line
Since "perf probe --add" supports function@filename syntax, --line
option should also support it.
Cc: 2nddept-manager@sdl.hitachi.co.jp
Cc: Franck Bui-Huu <fbuihuu@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: linux-kernel@vger.kernel.org
LKML-Reference: <20110210090810.1809.26913.stgit@ltc236.sdl.hitachi.co.jp>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/Documentation/perf-probe.txt | 7 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 15 |
2 files changed, 16 insertions, 6 deletions
diff --git a/tools/perf/Documentation/perf-probe.txt b/tools/perf/Documentation/perf-probe.txt index 81c3220e04f3..02bafce4b341 100644 --- a/tools/perf/Documentation/perf-probe.txt +++ b/tools/perf/Documentation/perf-probe.txt | |||
@@ -16,7 +16,7 @@ or | |||
16 | or | 16 | or |
17 | 'perf probe' --list | 17 | 'perf probe' --list |
18 | or | 18 | or |
19 | 'perf probe' [options] --line='FUNC[:RLN[+NUM|:RLN2]]|SRC:ALN[+NUM|:ALN2]' | 19 | 'perf probe' [options] --line='LINE' |
20 | or | 20 | or |
21 | 'perf probe' [options] --vars='PROBEPOINT' | 21 | 'perf probe' [options] --vars='PROBEPOINT' |
22 | 22 | ||
@@ -128,13 +128,14 @@ LINE SYNTAX | |||
128 | ----------- | 128 | ----------- |
129 | Line range is described by following syntax. | 129 | Line range is described by following syntax. |
130 | 130 | ||
131 | "FUNC[:RLN[+NUM|-RLN2]]|SRC[:ALN[+NUM|-ALN2]]" | 131 | "FUNC[@SRC][:RLN[+NUM|-RLN2]]|SRC[:ALN[+NUM|-ALN2]]" |
132 | 132 | ||
133 | FUNC specifies the function name of showing lines. 'RLN' is the start line | 133 | FUNC specifies the function name of showing lines. 'RLN' is the start line |
134 | number from function entry line, and 'RLN2' is the end line number. As same as | 134 | number from function entry line, and 'RLN2' is the end line number. As same as |
135 | probe syntax, 'SRC' means the source file path, 'ALN' is start line number, | 135 | probe syntax, 'SRC' means the source file path, 'ALN' is start line number, |
136 | and 'ALN2' is end line number in the file. It is also possible to specify how | 136 | and 'ALN2' is end line number in the file. It is also possible to specify how |
137 | many lines to show by using 'NUM'. | 137 | many lines to show by using 'NUM'. Moreover, 'FUNC@SRC' combination is good |
138 | for searching a specific function when several functions share same name. | ||
138 | So, "source.c:100-120" shows lines between 100th to l20th in source.c file. And "func:10+20" shows 20 lines from 10th line of func function. | 139 | So, "source.c:100-120" shows lines between 100th to l20th in source.c file. And "func:10+20" shows 20 lines from 10th line of func function. |
139 | 140 | ||
140 | LAZY MATCHING | 141 | LAZY MATCHING |
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 9d237e3cff5d..cbd76507a56f 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -595,11 +595,11 @@ static int parse_line_num(char **ptr, int *val, const char *what) | |||
595 | * The line range syntax is described by: | 595 | * The line range syntax is described by: |
596 | * | 596 | * |
597 | * SRC[:SLN[+NUM|-ELN]] | 597 | * SRC[:SLN[+NUM|-ELN]] |
598 | * FNC[:SLN[+NUM|-ELN]] | 598 | * FNC[@SRC][:SLN[+NUM|-ELN]] |
599 | */ | 599 | */ |
600 | int parse_line_range_desc(const char *arg, struct line_range *lr) | 600 | int parse_line_range_desc(const char *arg, struct line_range *lr) |
601 | { | 601 | { |
602 | char *range, *name = strdup(arg); | 602 | char *range, *file, *name = strdup(arg); |
603 | int err; | 603 | int err; |
604 | 604 | ||
605 | if (!name) | 605 | if (!name) |
@@ -649,7 +649,16 @@ int parse_line_range_desc(const char *arg, struct line_range *lr) | |||
649 | } | 649 | } |
650 | } | 650 | } |
651 | 651 | ||
652 | if (strchr(name, '.')) | 652 | file = strchr(name, '@'); |
653 | if (file) { | ||
654 | *file = '\0'; | ||
655 | lr->file = strdup(++file); | ||
656 | if (lr->file == NULL) { | ||
657 | err = -ENOMEM; | ||
658 | goto err; | ||
659 | } | ||
660 | lr->function = name; | ||
661 | } else if (strchr(name, '.')) | ||
653 | lr->file = name; | 662 | lr->file = name; |
654 | else | 663 | else |
655 | lr->function = name; | 664 | lr->function = name; |