diff options
author | Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> | 2013-09-18 09:56:14 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-10-09 10:12:41 -0400 |
commit | 9cd00941f8c274e6ca03ed238d96ddb0be474b86 (patch) | |
tree | f303cedf93ad3897c18c6e349819b14d20f48d79 /tools/perf/util | |
parent | 6e0dc374a2c912a8a967ea8a4f9696dd4b0a6d3e (diff) |
perf symbols: Support for Openembedded/Yocto -dbg packages
On OpenEmbedded the symbol files are located under a .debug folder on
the same folder as the binary file.
This patch adds support for such files.
Without this patch on perf top you can see:
no symbols found in /usr/lib/gstreamer-1.0/libtheoraenc.so.1.1.2, maybe
install a debug package?
84.56% libtheoraenc.so.1.1.2 [.] 0x000000000000b346
With this patch symbols are shown:
19.06% libtheoraenc.so.1.1.2 [.] oc_int_frag_satd_thresh_mmxext
9.76% libtheoraenc.so.1.1.2 [.] oc_analyze_mb_mode_luma
5.58% libtheoraenc.so.1.1.2 [.] oc_qii_state_advance
4.84% libtheoraenc.so.1.1.2 [.] oc_enc_tokenize_ac
...
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Acked-by: Ingo Molnar <mingo@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Waiman Long <Waiman.Long@hp.com>
Link: http://lkml.kernel.org/r/1379512574-25912-1-git-send-email-ricardo.ribalda@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/dso.c | 49 | ||||
-rw-r--r-- | tools/perf/util/dso.h | 1 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 1 |
3 files changed, 38 insertions, 13 deletions
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index e3c1ff8512c8..6bfc8aacaf7c 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c | |||
@@ -7,19 +7,20 @@ | |||
7 | char dso__symtab_origin(const struct dso *dso) | 7 | char dso__symtab_origin(const struct dso *dso) |
8 | { | 8 | { |
9 | static const char origin[] = { | 9 | static const char origin[] = { |
10 | [DSO_BINARY_TYPE__KALLSYMS] = 'k', | 10 | [DSO_BINARY_TYPE__KALLSYMS] = 'k', |
11 | [DSO_BINARY_TYPE__VMLINUX] = 'v', | 11 | [DSO_BINARY_TYPE__VMLINUX] = 'v', |
12 | [DSO_BINARY_TYPE__JAVA_JIT] = 'j', | 12 | [DSO_BINARY_TYPE__JAVA_JIT] = 'j', |
13 | [DSO_BINARY_TYPE__DEBUGLINK] = 'l', | 13 | [DSO_BINARY_TYPE__DEBUGLINK] = 'l', |
14 | [DSO_BINARY_TYPE__BUILD_ID_CACHE] = 'B', | 14 | [DSO_BINARY_TYPE__BUILD_ID_CACHE] = 'B', |
15 | [DSO_BINARY_TYPE__FEDORA_DEBUGINFO] = 'f', | 15 | [DSO_BINARY_TYPE__FEDORA_DEBUGINFO] = 'f', |
16 | [DSO_BINARY_TYPE__UBUNTU_DEBUGINFO] = 'u', | 16 | [DSO_BINARY_TYPE__UBUNTU_DEBUGINFO] = 'u', |
17 | [DSO_BINARY_TYPE__BUILDID_DEBUGINFO] = 'b', | 17 | [DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO] = 'o', |
18 | [DSO_BINARY_TYPE__SYSTEM_PATH_DSO] = 'd', | 18 | [DSO_BINARY_TYPE__BUILDID_DEBUGINFO] = 'b', |
19 | [DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE] = 'K', | 19 | [DSO_BINARY_TYPE__SYSTEM_PATH_DSO] = 'd', |
20 | [DSO_BINARY_TYPE__GUEST_KALLSYMS] = 'g', | 20 | [DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE] = 'K', |
21 | [DSO_BINARY_TYPE__GUEST_KMODULE] = 'G', | 21 | [DSO_BINARY_TYPE__GUEST_KALLSYMS] = 'g', |
22 | [DSO_BINARY_TYPE__GUEST_VMLINUX] = 'V', | 22 | [DSO_BINARY_TYPE__GUEST_KMODULE] = 'G', |
23 | [DSO_BINARY_TYPE__GUEST_VMLINUX] = 'V', | ||
23 | }; | 24 | }; |
24 | 25 | ||
25 | if (dso == NULL || dso->symtab_type == DSO_BINARY_TYPE__NOT_FOUND) | 26 | if (dso == NULL || dso->symtab_type == DSO_BINARY_TYPE__NOT_FOUND) |
@@ -64,6 +65,28 @@ int dso__binary_type_file(struct dso *dso, enum dso_binary_type type, | |||
64 | symbol_conf.symfs, dso->long_name); | 65 | symbol_conf.symfs, dso->long_name); |
65 | break; | 66 | break; |
66 | 67 | ||
68 | case DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO: | ||
69 | { | ||
70 | char *last_slash; | ||
71 | size_t len; | ||
72 | size_t dir_size; | ||
73 | |||
74 | last_slash = dso->long_name + dso->long_name_len; | ||
75 | while (last_slash != dso->long_name && *last_slash != '/') | ||
76 | last_slash--; | ||
77 | |||
78 | len = scnprintf(file, size, "%s", symbol_conf.symfs); | ||
79 | dir_size = last_slash - dso->long_name + 2; | ||
80 | if (dir_size > (size - len)) { | ||
81 | ret = -1; | ||
82 | break; | ||
83 | } | ||
84 | len += scnprintf(file + len, dir_size, "%s", dso->long_name); | ||
85 | len += scnprintf(file + len , size - len, ".debug%s", | ||
86 | last_slash); | ||
87 | break; | ||
88 | } | ||
89 | |||
67 | case DSO_BINARY_TYPE__BUILDID_DEBUGINFO: | 90 | case DSO_BINARY_TYPE__BUILDID_DEBUGINFO: |
68 | if (!dso->has_build_id) { | 91 | if (!dso->has_build_id) { |
69 | ret = -1; | 92 | ret = -1; |
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h index b793053335d6..dbd9241ea290 100644 --- a/tools/perf/util/dso.h +++ b/tools/perf/util/dso.h | |||
@@ -23,6 +23,7 @@ enum dso_binary_type { | |||
23 | DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE, | 23 | DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE, |
24 | DSO_BINARY_TYPE__KCORE, | 24 | DSO_BINARY_TYPE__KCORE, |
25 | DSO_BINARY_TYPE__GUEST_KCORE, | 25 | DSO_BINARY_TYPE__GUEST_KCORE, |
26 | DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO, | ||
26 | DSO_BINARY_TYPE__NOT_FOUND, | 27 | DSO_BINARY_TYPE__NOT_FOUND, |
27 | }; | 28 | }; |
28 | 29 | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index 7eb0362f4ffd..cd1dcc45049b 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -51,6 +51,7 @@ static enum dso_binary_type binary_type_symtab[] = { | |||
51 | DSO_BINARY_TYPE__SYSTEM_PATH_DSO, | 51 | DSO_BINARY_TYPE__SYSTEM_PATH_DSO, |
52 | DSO_BINARY_TYPE__GUEST_KMODULE, | 52 | DSO_BINARY_TYPE__GUEST_KMODULE, |
53 | DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE, | 53 | DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE, |
54 | DSO_BINARY_TYPE__OPENEMBEDDED_DEBUGINFO, | ||
54 | DSO_BINARY_TYPE__NOT_FOUND, | 55 | DSO_BINARY_TYPE__NOT_FOUND, |
55 | }; | 56 | }; |
56 | 57 | ||