瀏覽代碼

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>
Masami Hiramatsu 14 年之前
父節點
當前提交
e116dfa1c3
共有 2 個文件被更改,包括 16 次插入6 次删除
  1. 4 3
      tools/perf/Documentation/perf-probe.txt
  2. 12 3
      tools/perf/util/probe-event.c

+ 4 - 3
tools/perf/Documentation/perf-probe.txt

@@ -16,7 +16,7 @@ or
 or
 or
 'perf probe' --list
 'perf probe' --list
 or
 or
-'perf probe' [options] --line='FUNC[:RLN[+NUM|:RLN2]]|SRC:ALN[+NUM|:ALN2]'
+'perf probe' [options] --line='LINE'
 or
 or
 'perf probe' [options] --vars='PROBEPOINT'
 'perf probe' [options] --vars='PROBEPOINT'
 
 
@@ -128,13 +128,14 @@ LINE SYNTAX
 -----------
 -----------
 Line range is described by following syntax.
 Line range is described by following syntax.
 
 
- "FUNC[:RLN[+NUM|-RLN2]]|SRC[:ALN[+NUM|-ALN2]]"
+ "FUNC[@SRC][:RLN[+NUM|-RLN2]]|SRC[:ALN[+NUM|-ALN2]]"
 
 
 FUNC specifies the function name of showing lines. 'RLN' is the start line
 FUNC specifies the function name of showing lines. 'RLN' is the start line
 number from function entry line, and 'RLN2' is the end line number. As same as
 number from function entry line, and 'RLN2' is the end line number. As same as
 probe syntax, 'SRC' means the source file path, 'ALN' is start line number,
 probe syntax, 'SRC' means the source file path, 'ALN' is start line number,
 and 'ALN2' is end line number in the file. It is also possible to specify how
 and 'ALN2' is end line number in the file. It is also possible to specify how
-many lines to show by using 'NUM'.
+many lines to show by using 'NUM'. Moreover, 'FUNC@SRC' combination is good
+for searching a specific function when several functions share same name.
 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.
 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.
 
 
 LAZY MATCHING
 LAZY MATCHING

+ 12 - 3
tools/perf/util/probe-event.c

@@ -595,11 +595,11 @@ static int parse_line_num(char **ptr, int *val, const char *what)
  * The line range syntax is described by:
  * The line range syntax is described by:
  *
  *
  *         SRC[:SLN[+NUM|-ELN]]
  *         SRC[:SLN[+NUM|-ELN]]
- *         FNC[:SLN[+NUM|-ELN]]
+ *         FNC[@SRC][:SLN[+NUM|-ELN]]
  */
  */
 int parse_line_range_desc(const char *arg, struct line_range *lr)
 int parse_line_range_desc(const char *arg, struct line_range *lr)
 {
 {
-	char *range, *name = strdup(arg);
+	char *range, *file, *name = strdup(arg);
 	int err;
 	int err;
 
 
 	if (!name)
 	if (!name)
@@ -649,7 +649,16 @@ int parse_line_range_desc(const char *arg, struct line_range *lr)
 		}
 		}
 	}
 	}
 
 
-	if (strchr(name, '.'))
+	file = strchr(name, '@');
+	if (file) {
+		*file = '\0';
+		lr->file = strdup(++file);
+		if (lr->file == NULL) {
+			err = -ENOMEM;
+			goto err;
+		}
+		lr->function = name;
+	} else if (strchr(name, '.'))
 		lr->file = name;
 		lr->file = name;
 	else
 	else
 		lr->function = name;
 		lr->function = name;