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>
This commit is contained in:
parent
caa36ed7ba
commit
a706670900
|
@ -324,8 +324,9 @@ int cmd_annotate(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||
OPT_BOOLEAN(0, "skip-missing", &annotate.skip_missing,
|
||||
"Skip symbols that cannot be annotated"),
|
||||
OPT_STRING('C', "cpu", &annotate.cpu_list, "cpu", "list of cpus to profile"),
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_CALLBACK(0, "symfs", NULL, "directory",
|
||||
"Look for files with symbols relative to this directory",
|
||||
symbol__config_symfs),
|
||||
OPT_BOOLEAN(0, "source", &symbol_conf.annotate_src,
|
||||
"Interleave source code with assembly code (default)"),
|
||||
OPT_BOOLEAN(0, "asm-raw", &symbol_conf.annotate_asm_raw,
|
||||
|
|
|
@ -812,8 +812,9 @@ static const struct option options[] = {
|
|||
OPT_STRING_NOEMPTY('t', "field-separator", &symbol_conf.field_sep, "separator",
|
||||
"separator for columns, no spaces will be added between "
|
||||
"columns '.' is reserved."),
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_CALLBACK(0, "symfs", NULL, "directory",
|
||||
"Look for files with symbols relative to this directory",
|
||||
symbol__config_symfs),
|
||||
OPT_UINTEGER('o', "order", &sort_compute, "Specify compute sorting."),
|
||||
OPT_CALLBACK(0, "percentage", NULL, "relative|absolute",
|
||||
"How to display percentage of filtered entries", parse_filter_percentage),
|
||||
|
|
|
@ -770,8 +770,9 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||
"columns '.' is reserved."),
|
||||
OPT_BOOLEAN('U', "hide-unresolved", &symbol_conf.hide_unresolved,
|
||||
"Only display entries resolved to a symbol"),
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_CALLBACK(0, "symfs", NULL, "directory",
|
||||
"Look for files with symbols relative to this directory",
|
||||
symbol__config_symfs),
|
||||
OPT_STRING('C', "cpu", &report.cpu_list, "cpu",
|
||||
"list of cpus to profile"),
|
||||
OPT_BOOLEAN('I', "show-info", &report.show_full_info,
|
||||
|
|
|
@ -2010,8 +2010,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|||
"file", "kallsyms pathname"),
|
||||
OPT_BOOLEAN('G', "hide-call-graph", &no_callchain,
|
||||
"When printing symbols do not display call chain"),
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_CALLBACK(0, "symfs", NULL, "directory",
|
||||
"Look for files with symbols relative to this directory",
|
||||
symbol__config_symfs),
|
||||
OPT_CALLBACK('F', "fields", NULL, "str",
|
||||
"comma separated output fields prepend with 'type:'. "
|
||||
"Valid types: hw,sw,trace,raw. "
|
||||
|
|
|
@ -1945,8 +1945,9 @@ int cmd_timechart(int argc, const char **argv,
|
|||
OPT_CALLBACK('p', "process", NULL, "process",
|
||||
"process selector. Pass a pid or process name.",
|
||||
parse_process),
|
||||
OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",
|
||||
"Look for files with symbols relative to this directory"),
|
||||
OPT_CALLBACK(0, "symfs", NULL, "directory",
|
||||
"Look for files with symbols relative to this directory",
|
||||
symbol__config_symfs),
|
||||
OPT_INTEGER('n', "proc-num", &tchart.proc_num,
|
||||
"min. number of tasks to print"),
|
||||
OPT_BOOLEAN('t', "topology", &tchart.topology,
|
||||
|
|
|
@ -63,9 +63,7 @@ int dso__read_binary_type_filename(const struct dso *dso,
|
|||
}
|
||||
break;
|
||||
case DSO_BINARY_TYPE__BUILD_ID_CACHE:
|
||||
/* skip the locally configured cache if a symfs is given */
|
||||
if (symbol_conf.symfs[0] ||
|
||||
(dso__build_id_filename(dso, filename, size) == NULL))
|
||||
if (dso__build_id_filename(dso, filename, size) == NULL)
|
||||
ret = -1;
|
||||
break;
|
||||
|
||||
|
|
|
@ -2033,3 +2033,26 @@ void symbol__exit(void)
|
|||
symbol_conf.sym_list = symbol_conf.dso_list = symbol_conf.comm_list = NULL;
|
||||
symbol_conf.initialized = false;
|
||||
}
|
||||
|
||||
int symbol__config_symfs(const struct option *opt __maybe_unused,
|
||||
const char *dir, int unset __maybe_unused)
|
||||
{
|
||||
char *bf = NULL;
|
||||
int ret;
|
||||
|
||||
symbol_conf.symfs = strdup(dir);
|
||||
if (symbol_conf.symfs == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
/* skip the locally configured cache if a symfs is given, and
|
||||
* config buildid dir to symfs/.debug
|
||||
*/
|
||||
ret = asprintf(&bf, "%s/%s", dir, ".debug");
|
||||
if (ret < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
set_buildid_dir(bf);
|
||||
|
||||
free(bf);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -290,6 +290,8 @@ bool symbol_type__is_a(char symbol_type, enum map_type map_type);
|
|||
bool symbol__restricted_filename(const char *filename,
|
||||
const char *restricted_filename);
|
||||
bool symbol__is_idle(struct symbol *sym);
|
||||
int symbol__config_symfs(const struct option *opt __maybe_unused,
|
||||
const char *dir, int unset __maybe_unused);
|
||||
|
||||
int dso__load_sym(struct dso *dso, struct map *map, struct symsrc *syms_ss,
|
||||
struct symsrc *runtime_ss, symbol_filter_t filter,
|
||||
|
|
Loading…
Reference in New Issue