perf symbols: Take into account symfs setting when reading file build ID
After commit5baecbcd9c
("perf symbols: we can now read separate debug-info files based on a build ID") and when --symfs option is used perf failed to pick up symbols for file with the same name between host and sysroot specified by --symfs option. One can see message like this: bin/bash with build id 26f0062cb6950d4d1ab0fd9c43eae8b10ca42062 not found, continuing without symbols It happens because code added by5baecbcd9c
opens files directly by dso->long_name without symbol_conf.symfs consideration, which as result picks one from the host. It reads its build ID and later even code finds another proper file in directory pointed by --symfs perf ignores it because build id mismatches. Fix is to use __symbol__join_symfs to adjust file name according to --symfs setting. If no --symfs passed the operation would noop and picks the same host file as before. Also note in latter tree after5baecbcd9c
commit additional check for '!dso->has_build_id' was added, so to observe error condition 'perf record' should run with --no-buildid, so perf.data itself would not have build id for target binary in buildid perf section and 'perf report' will pass '!dso->has_build_id' condition. Or target binary should not have build id, but the same binary on host has build id, again '!dso->has_build_id' will pass in this case and incorrect build id could be read if --symfs is used. Signed-off-by: Victor Kamensky <kamensky@cisco.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Chris Phlipot <cphlipot0@gmail.com> Cc: Dima Kogan <dima@secretsauce.net> Cc: He Kuang <hekuang@huawei.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Wang Nan <wangnan0@huawei.com> Cc: xe-linux-external@cisco.com Fixes:5baecbcd9c
("perf symbols: we can now read separate debug-info files based on a build ID") Link: http://lkml.kernel.org/r/1486424908-17094-1-git-send-email-kamensky@cisco.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
27cf5706a0
commit
9b20065351
|
@ -1460,9 +1460,11 @@ int dso__load(struct dso *dso, struct map *map)
|
|||
* DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
|
||||
*/
|
||||
if (!dso->has_build_id &&
|
||||
is_regular_file(dso->long_name) &&
|
||||
filename__read_build_id(dso->long_name, build_id, BUILD_ID_SIZE) > 0)
|
||||
is_regular_file(dso->long_name)) {
|
||||
__symbol__join_symfs(name, PATH_MAX, dso->long_name);
|
||||
if (filename__read_build_id(name, build_id, BUILD_ID_SIZE) > 0)
|
||||
dso__set_build_id(dso, build_id);
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterate over candidate debug images.
|
||||
|
|
Loading…
Reference in New Issue