diff options
author | He Kuang <hekuang@huawei.com> | 2016-05-19 07:47:37 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-05-20 10:43:58 -0400 |
commit | a706670900073d236938d539d1109338d64b47bb (patch) | |
tree | f443923e3e27b3c9b667ea284f409be52a72be4e /tools | |
parent | caa36ed7ba82caa9f685dd04aa10d0bf87ea8b6a (diff) |
perf tools: Set buildid dir under symfs when --symfs is provided
This patch moves the reference of buildid dir to 'symfs/.debug' and
skips the local buildid dir when '--symfs' is given, so that every
single file opened by perf is relative to symfs directory now.
Signed-off-by: He Kuang <hekuang@huawei.com>
Acked-by: David Ahern <dsahern@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ekaterina Tumanova <tumanova@linux.vnet.ibm.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1463658462-85131-2-git-send-email-hekuang@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-annotate.c | 5 | ||||
-rw-r--r-- | tools/perf/builtin-diff.c | 5 | ||||
-rw-r--r-- | tools/perf/builtin-report.c | 5 | ||||
-rw-r--r-- | tools/perf/builtin-script.c | 5 | ||||
-rw-r--r-- | tools/perf/builtin-timechart.c | 5 | ||||
-rw-r--r-- | tools/perf/util/dso.c | 4 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 23 | ||||
-rw-r--r-- | tools/perf/util/symbol.h | 2 |
8 files changed, 41 insertions, 13 deletions
diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c index 814158393656..25c81734a950 100644 --- a/tools/perf/builtin-annotate.c +++ b/tools/perf/builtin-annotate.c | |||
@@ -324,8 +324,9 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused) | |||
324 | OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing, | 324 | OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing, |
325 | "Skip symbols that cannot be annotated"), | 325 | "Skip symbols that cannot be annotated"), |
326 | OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"), | 326 | OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"), |
327 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | 327 | OPT_CALLBACK(0, "symfs", NULL, "directory", |
328 | "Look for files with symbols relative to this directory"), | 328 | "Look for files with symbols relative to this directory", |
329 | symbol__config_symfs), | ||
329 | OPT_BOOLEAN(0, "source", &symbol_conf.annotate_src, | 330 | OPT_BOOLEAN(0, "source", &symbol_conf.annotate_src, |
330 | "Interleave source code with assembly code (default)"), | 331 | "Interleave source code with assembly code (default)"), |
331 | OPT_BOOLEAN(0, "asm-raw", &symbol_conf.annotate_asm_raw, | 332 | OPT_BOOLEAN(0, "asm-raw", &symbol_conf.annotate_asm_raw, |
diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index 9ce354f469dc..f7645a42708e 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c | |||
@@ -812,8 +812,9 @@ static const struct option options[] = { | |||
812 | OPT_STRING_NOEMPTY('t', "field-separator", &symbol_conf.field_sep, "separator", | 812 | OPT_STRING_NOEMPTY('t', "field-separator", &symbol_conf.field_sep, "separator", |
813 | "separator for columns, no spaces will be added between " | 813 | "separator for columns, no spaces will be added between " |
814 | "columns '.' is reserved."), | 814 | "columns '.' is reserved."), |
815 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | 815 | OPT_CALLBACK(0, "symfs", NULL, "directory", |
816 | "Look for files with symbols relative to this directory"), | 816 | "Look for files with symbols relative to this directory", |
817 | symbol__config_symfs), | ||
817 | OPT_UINTEGER('o', "order", &sort_compute, "Specify compute sorting."), | 818 | OPT_UINTEGER('o', "order", &sort_compute, "Specify compute sorting."), |
818 | OPT_CALLBACK(0, "percentage", NULL, "relative|absolute", | 819 | OPT_CALLBACK(0, "percentage", NULL, "relative|absolute", |
819 | "How to display percentage of filtered entries", parse_filter_percentage), | 820 | "How to display percentage of filtered entries", parse_filter_percentage), |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 9bc71c6a54f6..a87cb338bdf1 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
@@ -770,8 +770,9 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused) | |||
770 | "columns '.' is reserved."), | 770 | "columns '.' is reserved."), |
771 | OPT_BOOLEAN('U', "hide-unresolved", &symbol_conf.hide_unresolved, | 771 | OPT_BOOLEAN('U', "hide-unresolved", &symbol_conf.hide_unresolved, |
772 | "Only display entries resolved to a symbol"), | 772 | "Only display entries resolved to a symbol"), |
773 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | 773 | OPT_CALLBACK(0, "symfs", NULL, "directory", |
774 | "Look for files with symbols relative to this directory"), | 774 | "Look for files with symbols relative to this directory", |
775 | symbol__config_symfs), | ||
775 | OPT_STRING('C', "cpu", &report.cpu_list, "cpu", | 776 | OPT_STRING('C', "cpu", &report.cpu_list, "cpu", |
776 | "list of cpus to profile"), | 777 | "list of cpus to profile"), |
777 | OPT_BOOLEAN('I', "show-info", &report.show_full_info, | 778 | OPT_BOOLEAN('I', "show-info", &report.show_full_info, |
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 0a83f4bacc7c..e3ce2f34d3ad 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -2010,8 +2010,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused) | |||
2010 | "file", "kallsyms pathname"), | 2010 | "file", "kallsyms pathname"), |
2011 | OPT_BOOLEAN('G', "hide-call-graph", &no_callchain, | 2011 | OPT_BOOLEAN('G', "hide-call-graph", &no_callchain, |
2012 | "When printing symbols do not display call chain"), | 2012 | "When printing symbols do not display call chain"), |
2013 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | 2013 | OPT_CALLBACK(0, "symfs", NULL, "directory", |
2014 | "Look for files with symbols relative to this directory"), | 2014 | "Look for files with symbols relative to this directory", |
2015 | symbol__config_symfs), | ||
2015 | OPT_CALLBACK('F', "fields", NULL, "str", | 2016 | OPT_CALLBACK('F', "fields", NULL, "str", |
2016 | "comma separated output fields prepend with 'type:'. " | 2017 | "comma separated output fields prepend with 'type:'. " |
2017 | "Valid types: hw,sw,trace,raw. " | 2018 | "Valid types: hw,sw,trace,raw. " |
diff --git a/tools/perf/builtin-timechart.c b/tools/perf/builtin-timechart.c index 40cc9bb3506c..733a55422d03 100644 --- a/tools/perf/builtin-timechart.c +++ b/tools/perf/builtin-timechart.c | |||
@@ -1945,8 +1945,9 @@ int cmd_timechart(int argc, const char **argv, | |||
1945 | OPT_CALLBACK('p', "process", NULL, "process", | 1945 | OPT_CALLBACK('p', "process", NULL, "process", |
1946 | "process selector. Pass a pid or process name.", | 1946 | "process selector. Pass a pid or process name.", |
1947 | parse_process), | 1947 | parse_process), |
1948 | OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory", | 1948 | OPT_CALLBACK(0, "symfs", NULL, "directory", |
1949 | "Look for files with symbols relative to this directory"), | 1949 | "Look for files with symbols relative to this directory", |
1950 | symbol__config_symfs), | ||
1950 | OPT_INTEGER('n', "proc-num", &tchart.proc_num, | 1951 | OPT_INTEGER('n', "proc-num", &tchart.proc_num, |
1951 | "min. number of tasks to print"), | 1952 | "min. number of tasks to print"), |
1952 | OPT_BOOLEAN('t', "topology", &tchart.topology, | 1953 | OPT_BOOLEAN('t', "topology", &tchart.topology, |
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 75b75615e2f8..5d286f5d7906 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c | |||
@@ -63,9 +63,7 @@ int dso__read_binary_type_filename(const struct dso *dso, | |||
63 | } | 63 | } |
64 | break; | 64 | break; |
65 | case DSO_BINARY_TYPE__BUILD_ID_CACHE: | 65 | case DSO_BINARY_TYPE__BUILD_ID_CACHE: |
66 | /* skip the locally configured cache if a symfs is given */ | 66 | if (dso__build_id_filename(dso, filename, size) == NULL) |
67 | if (symbol_conf.symfs[0] || | ||
68 | (dso__build_id_filename(dso, filename, size) == NULL)) | ||
69 | ret = -1; | 67 | ret = -1; |
70 | break; | 68 | break; |
71 | 69 | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 2252b545ff43..20f9cb32b703 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -2033,3 +2033,26 @@ void symbol__exit(void) | |||
2033 | symbol_conf.sym_list = symbol_conf.dso_list = symbol_conf.comm_list = NULL; | 2033 | symbol_conf.sym_list = symbol_conf.dso_list = symbol_conf.comm_list = NULL; |
2034 | symbol_conf.initialized = false; | 2034 | symbol_conf.initialized = false; |
2035 | } | 2035 | } |
2036 | |||
2037 | int symbol__config_symfs(const struct option *opt __maybe_unused, | ||
2038 | const char *dir, int unset __maybe_unused) | ||
2039 | { | ||
2040 | char *bf = NULL; | ||
2041 | int ret; | ||
2042 | |||
2043 | symbol_conf.symfs = strdup(dir); | ||
2044 | if (symbol_conf.symfs == NULL) | ||
2045 | return -ENOMEM; | ||
2046 | |||
2047 | /* skip the locally configured cache if a symfs is given, and | ||
2048 | * config buildid dir to symfs/.debug | ||
2049 | */ | ||
2050 | ret = asprintf(&bf, "%s/%s", dir, ".debug"); | ||
2051 | if (ret < 0) | ||
2052 | return -ENOMEM; | ||
2053 | |||
2054 | set_buildid_dir(bf); | ||
2055 | |||
2056 | free(bf); | ||
2057 | return 0; | ||
2058 | } | ||
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 25f2fd672c2e..fa415347dbf9 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h | |||
@@ -290,6 +290,8 @@ bool symbol_type__is_a(char symbol_type, enum map_type map_type); | |||
290 | bool symbol__restricted_filename(const char *filename, | 290 | bool symbol__restricted_filename(const char *filename, |
291 | const char *restricted_filename); | 291 | const char *restricted_filename); |
292 | bool symbol__is_idle(struct symbol *sym); | 292 | bool symbol__is_idle(struct symbol *sym); |
293 | int symbol__config_symfs(const struct option *opt __maybe_unused, | ||
294 | const char *dir, int unset __maybe_unused); | ||
293 | 295 | ||
294 | int dso__load_sym(struct dso *dso, struct map *map, struct symsrc *syms_ss, | 296 | int dso__load_sym(struct dso *dso, struct map *map, struct symsrc *syms_ss, |
295 | struct symsrc *runtime_ss, symbol_filter_t filter, | 297 | struct symsrc *runtime_ss, symbol_filter_t filter, |