perf annotate: Fix symbolic link of build-id cache
The commit6ebd2547dd
("perf annotate: Fix a bug following symbolic link of a build-id file") changed to use dirname to follow the symlink. But it only considers new-style build-id cache names so old names fail on readlink() and force to use system path which might not available. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Taeung Song <treeze.taeung@gmail.com> Cc: Wang Nan <wangnan0@huawei.com> Cc: kernel-team@lge.com Fixes:6ebd2547dd
("perf annotate: Fix a bug following symbolic link of a build-id file") Link: http://lkml.kernel.org/r/20170608073109.30699-2-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
14fc42fa1b
commit
3619ef76b3
|
@ -1321,6 +1321,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
|
|||
char linkname[PATH_MAX];
|
||||
char *build_id_filename;
|
||||
char *build_id_path = NULL;
|
||||
char *pos;
|
||||
|
||||
if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
|
||||
!dso__is_kcore(dso))
|
||||
|
@ -1340,7 +1341,14 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
|
|||
if (!build_id_path)
|
||||
return -1;
|
||||
|
||||
dirname(build_id_path);
|
||||
/*
|
||||
* old style build-id cache has name of XX/XXXXXXX.. while
|
||||
* new style has XX/XXXXXXX../{elf,kallsyms,vdso}.
|
||||
* extract the build-id part of dirname in the new style only.
|
||||
*/
|
||||
pos = strrchr(build_id_path, '/');
|
||||
if (pos && strlen(pos) < SBUILD_ID_SIZE - 2)
|
||||
dirname(build_id_path);
|
||||
|
||||
if (dso__is_kcore(dso) ||
|
||||
readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||
|
||||
|
|
Loading…
Reference in New Issue