perf tools: Use symfs when opening debuginfo by path
authorNamhyung Kim <namhyung@kernel.org>
Wed, 12 Feb 2025 22:14:45 +0000 (14:14 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Thu, 13 Feb 2025 03:44:16 +0000 (19:44 -0800)
I found that it failed to load a binary using --symfs option.  Say I
have a binary in /home/user/prog/xxx and a perf data file with it.  If I
move them to a different machine and use --symfs, it tries to find the
binary in some locations under symfs using dso__read_binary_type_filename(),
but not the last one.

  ${symfs}/usr/lib/debug/home/user/prog/xxx.debug
  ${symfs}/usr/lib/debug/home/user/prog/xxx
  ${symfs}/home/user/prog/.debug/xxx
  /home/user/prog/xxx

It should check ${symfs}/home/usr/prog/xxx.  Let's fix it.

Reviewed-by: Ian Rogers <irogers@google.com>
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Link: https://lore.kernel.org/r/20250212221445.437481-1-namhyung@kernel.org
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/util/debuginfo.c

index 19acf4775d3587a44d6fd05ed43f5603d3b1b735..b5deea7cbdf24620472aa1cd18594029971f0b74 100644 (file)
@@ -125,8 +125,12 @@ struct debuginfo *debuginfo__new(const char *path)
        dso__put(dso);
 
 out:
+       if (dinfo)
+               return dinfo;
+
        /* if failed to open all distro debuginfo, open given binary */
-       return dinfo ? : __debuginfo__new(path);
+       symbol__join_symfs(buf, path);
+       return __debuginfo__new(buf);
 }
 
 void debuginfo__delete(struct debuginfo *dbg)