When selecting the filename to pass to objdump for disassembly, if there is
no entry for vmlinux in the build-id cache then the fallback code prepends
symfs path to vmlinux path. If the vmlinux option was specified, this is
unnecessary and, as a result, vmlinux is not found.

Don't prepend symfs path if DSO is [kernel.kallsyms]

Signed-off-by: Martin Vuille <jpm...@aim.com>
---
 tools/perf/util/annotate.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 425b7f0760ec..0b78cc4fb155 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1412,7 +1412,14 @@ static int dso__disassemble_filename(struct dso *dso, 
char *filename, size_t fil
                 * cache, or is just a kallsyms file, well, lets hope that this
                 * DSO is the same as when 'perf record' ran.
                 */
-               __symbol__join_symfs(filename, filename_size, dso->long_name);
+               if (!strstr(dso->short_name, DSO__NAME_KALLSYMS))
+               {
+                       __symbol__join_symfs(filename, filename_size, 
dso->long_name);
+               }
+               else
+               {
+                       scnprintf(filename, filename_size, "%s", 
dso->long_name);
+               }
        }
 
        free(build_id_path);
-- 
2.13.6

Reply via email to