perf annotate: Allow annotation for decompressed kernel modules
tip-bot for Jiri Olsa
merge botCommit-ID: 2c7da8c590ad719796f46c875a096eb45ef971c7 Gitweb: http://git.kernel.org/tip/2c7da8c590ad719796f46c875a096eb45ef971c7 Author: Jiri Olsa <[email protected]> AuthorDate: Mon, 2 Mar 2015 12:56:12 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 23 Mar 2015 12:49:27 -0300
perf annotate: Allow annotation for decompressed kernel modules
Decompressing kernel module file for objdump command if needed. Annotation commands now display annotation for compressed kernel modules.
Signed-off-by Jiri Olsa <[email protected]>
Acked-by Namhyung Kim <[email protected]>
Cc Adrian Hunter <[email protected]>
Cc Corey Ashford <[email protected]>
Cc David Ahern <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Paul Mackerras <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/annotate.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
tools/perf/util/annotate.c +31 -1
@@ -1008,6 +1008,32 @@ fallback: } filename = symfs_filename; } + }else if (dso__needs_decompress (dso)) { +char tmp[PATH_MAX ]; +struct kmod_path m; +int fd; +bool ret; + +if (kmod_path__parse_ext (&m, symfs_filename)) + goto out_free_filename; + +snprintf (tmp,PATH_MAX ,"/tmp/perf-kmod-XXXXXX" ); + + fd =mkstemp (tmp); +if (fd <0 ) { +free (m.ext); + goto out_free_filename; + } + + ret =decompress_to_file (m.ext, symfs_filename, fd); + +free (m.ext); +close (fd); + +if (!ret) + goto out_free_filename; + +strcpy (symfs_filename, tmp); } snprintf(command, sizeof(command),
@@ -1027,7 +1053,7 @@ fallback: file =popen (command,"r" );if (!file) - goto out_free_filename; + goto out_remove_tmp;while (!feof (file)) if (symbol__parse_objdump_line(sym, map, file, privsize,
@@ -1042,6 +1068,10 @@ fallback:delete_last_nop (sym);pclose (file); + +out_remove_tmp: +if (dso__needs_decompress (dso)) +unlink (symfs_filename); out_free_filename:if (delete_extract)kcore_extract__delete (&kce);