aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/util/map.c7
-rw-r--r--tools/perf/util/symbol.c26
-rw-r--r--tools/perf/util/symbol.h6
3 files changed, 15 insertions, 24 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 36ff0bf0315d..f6626cc3df2e 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -68,8 +68,13 @@ struct map *map__new(struct mmap_event *event, enum map_type type,
68 map__init(self, type, event->start, event->start + event->len, 68 map__init(self, type, event->start, event->start + event->len,
69 event->pgoff, dso); 69 event->pgoff, dso);
70 70
71 if (self->dso == vdso || anon) 71 if (anon) {
72set_identity:
72 self->map_ip = self->unmap_ip = identity__map_ip; 73 self->map_ip = self->unmap_ip = identity__map_ip;
74 } else if (strcmp(filename, "[vdso]") == 0) {
75 dso__set_loaded(dso, self->type);
76 goto set_identity;
77 }
73 } 78 }
74 return self; 79 return self;
75out_delete: 80out_delete:
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 051d71b33df0..e752837363ee 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -53,11 +53,6 @@ bool dso__sorted_by_name(const struct dso *self, enum map_type type)
53 return self->sorted_by_name & (1 << type); 53 return self->sorted_by_name & (1 << type);
54} 54}
55 55
56static void dso__set_loaded(struct dso *self, enum map_type type)
57{
58 self->loaded |= (1 << type);
59}
60
61static void dso__set_sorted_by_name(struct dso *self, enum map_type type) 56static void dso__set_sorted_by_name(struct dso *self, enum map_type type)
62{ 57{
63 self->sorted_by_name |= (1 << type); 58 self->sorted_by_name |= (1 << type);
@@ -1697,7 +1692,6 @@ out_fixup:
1697 1692
1698LIST_HEAD(dsos__user); 1693LIST_HEAD(dsos__user);
1699LIST_HEAD(dsos__kernel); 1694LIST_HEAD(dsos__kernel);
1700struct dso *vdso;
1701 1695
1702static void dsos__add(struct list_head *head, struct dso *dso) 1696static void dsos__add(struct list_head *head, struct dso *dso)
1703{ 1697{
@@ -1790,24 +1784,12 @@ static struct dso *dsos__create_kernel(const char *vmlinux)
1790{ 1784{
1791 struct dso *kernel = dso__new_kernel(vmlinux); 1785 struct dso *kernel = dso__new_kernel(vmlinux);
1792 1786
1793 if (kernel == NULL) 1787 if (kernel != NULL) {
1794 return NULL; 1788 dso__read_running_kernel_build_id(kernel);
1795 1789 dsos__add(&dsos__kernel, kernel);
1796 vdso = dso__new("[vdso]"); 1790 }
1797 if (vdso == NULL)
1798 goto out_delete_kernel_dso;
1799 dso__set_loaded(vdso, MAP__FUNCTION);
1800
1801 dso__read_running_kernel_build_id(kernel);
1802
1803 dsos__add(&dsos__kernel, kernel);
1804 dsos__add(&dsos__user, vdso);
1805 1791
1806 return kernel; 1792 return kernel;
1807
1808out_delete_kernel_dso:
1809 dso__delete(kernel);
1810 return NULL;
1811} 1793}
1812 1794
1813int __map_groups__create_kernel_maps(struct map_groups *self, 1795int __map_groups__create_kernel_maps(struct map_groups *self,
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index e6a59e5c2bea..e90568a9e467 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -121,6 +121,11 @@ void dso__delete(struct dso *self);
121bool dso__loaded(const struct dso *self, enum map_type type); 121bool dso__loaded(const struct dso *self, enum map_type type);
122bool dso__sorted_by_name(const struct dso *self, enum map_type type); 122bool dso__sorted_by_name(const struct dso *self, enum map_type type);
123 123
124static inline void dso__set_loaded(struct dso *self, enum map_type type)
125{
126 self->loaded |= (1 << type);
127}
128
124void dso__sort_by_name(struct dso *self, enum map_type type); 129void dso__sort_by_name(struct dso *self, enum map_type type);
125 130
126extern struct list_head dsos__user, dsos__kernel; 131extern struct list_head dsos__user, dsos__kernel;
@@ -161,5 +166,4 @@ int kallsyms__parse(const char *filename, void *arg,
161int symbol__init(void); 166int symbol__init(void);
162bool symbol_type__is_a(char symbol_type, enum map_type map_type); 167bool symbol_type__is_a(char symbol_type, enum map_type map_type);
163 168
164extern struct dso *vdso;
165#endif /* __PERF_SYMBOL */ 169#endif /* __PERF_SYMBOL */