perf symbols: Try the .debug/ DSO cache as a last resort
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: dc38218e8b598a0092dae9715e603e9628203bec Gitweb: http://git.kernel.org/tip/dc38218e8b598a0092dae9715e603e9628203bec Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Sun, 11 Oct 2015 17:17:24 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 12 Oct 2015 13:52:27 -0300
perf symbols: Try the .debug/ DSO cache as a last resort
Not as the first attempt at finding a vmlinux for the running kernel, this way we get a more informative filename to present in tools, it will check that the build-id is the same as the one previously loaded in the DSO in dso->build_id, reading from /sys/kernel/notes, for instance.
E.g. in the annotation TUI, going from 'perf top', for the scsi_sg_alloc kernel function, in the first line:
Before:
scsi_sg_alloc /root/.debug/.build-id/28/2777c262e6b3c0451375163c9a81c893218ab1
After:
scsi_sg_alloc /lib/modules/4.3.0-rc1+/build/vmlinux
And:
# ls -la /root/.debug/.build-id/28/2777c262e6b3c0451375163c9a81c893218ab1 lrwxrwxrwx. 1 root root 81 Sep 22 16:11 /root/.debug/.build-id/28/2777c262e6b3c0451375163c9a81c893218ab1 -> ../../home/git/build/v4.3.0-rc1+/vmlinux/282777c262e6b3c0451375163c9a81c893218ab1 # file ~/.debug/home/git/build/v4.3.0-rc1+/vmlinux/282777c262e6b3c0451375163c9a81c893218ab1 /root/.debug/home/git/build/v4.3.0-rc1+/vmlinux/282777c262e6b3c0451375163c9a81c893218ab1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=282777c262e6b3c0451375163c9a81c893218ab1, not stripped #
The same as:
# file /lib/modules/4.3.0-rc1+/build/vmlinux /lib/modules/4.3.0-rc1+/build/vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=282777c262e6b3c0451375163c9a81c893218ab1, not stripped
Furthermore:
# sha256sum /lib/modules/4.3.0-rc1+/build/vmlinux e7a789bbdc61029ec09140c228e1dd651271f38ef0b8416c0b7d5ff727b98be2 /lib/modules/4.3.0-rc1+/build/vmlinux # sha256sum ~/.debug/home/git/build/v4.3.0-rc1+/vmlinux/282777c262e6b3c0451375163c9a81c893218ab1 e7a789bbdc61029ec09140c228e1dd651271f38ef0b8416c0b7d5ff727b98be2 /root/.debug/home/git/build/v4.3.0-rc1+/vmlinux/282777c262e6b3c0451375163c9a81c893218ab1 [root@zoo new]#
Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/symbol.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
tools/perf/util/symbol.c +9 -9
@@ -1607,6 +1607,15 @@ int dso__load_vmlinux_path(struct dso *dso, struct map *map,int i, err =0 ;char *filename =NULL ; +pr_debug ("Looking at the vmlinux_path (%d entries long)\n" , + vmlinux_path__nr_entries +1 ); + +for (i =0 ; i < vmlinux_path__nr_entries; ++i) { + err =dso__load_vmlinux (dso, map, vmlinux_path[i], false, filter); +if (err >0 ) + goto out; + } +if (!symbol_conf.ignore_vmlinux_buildid) filename =dso__build_id_filename (dso,NULL ,0 );if (filename !=NULL ) {
@@ -1615,15 +1624,6 @@ int dso__load_vmlinux_path(struct dso *dso, struct map *map, goto out;free (filename); } - -pr_debug ("Looking at the vmlinux_path (%d entries long)\n" , - vmlinux_path__nr_entries +1 ); - -for (i =0 ; i < vmlinux_path__nr_entries; ++i) { - err =dso__load_vmlinux (dso, map, vmlinux_path[i], false, filter); -if (err >0 ) -break ; - } out:return err; }