diff options
Diffstat (limited to 'tools/perf/util/dso.c')
-rw-r--r-- | tools/perf/util/dso.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index e3c1ff8512c8..af4c687cc49b 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; |
@@ -427,6 +450,7 @@ struct dso *dso__new(const char *name) | |||
427 | dso->rel = 0; | 450 | dso->rel = 0; |
428 | dso->sorted_by_name = 0; | 451 | dso->sorted_by_name = 0; |
429 | dso->has_build_id = 0; | 452 | dso->has_build_id = 0; |
453 | dso->has_srcline = 1; | ||
430 | dso->kernel = DSO_TYPE_USER; | 454 | dso->kernel = DSO_TYPE_USER; |
431 | dso->needs_swap = DSO_SWAP__UNSET; | 455 | dso->needs_swap = DSO_SWAP__UNSET; |
432 | INIT_LIST_HEAD(&dso->node); | 456 | INIT_LIST_HEAD(&dso->node); |