aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/map.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2010-02-03 13:52:00 -0500
committerIngo Molnar <mingo@elte.hu>2010-02-04 03:33:24 -0500
commit9de89fe7c577847877ae00ea1aa6315559b10243 (patch)
tree523bcd2c2b1e2a839100b472ff864860cdc8caeb /tools/perf/util/map.c
parentb8f46c5a34fa64fd456295388d18f50ae69d9f37 (diff)
perf symbols: Remove perf_session usage in symbols layer
I noticed while writing the first test in 'perf regtest' that to just test the symbol handling routines one needs to create a perf session, that is a layer centered on a perf.data file, events, etc, so I untied these layers. This reduces the complexity for the users as the number of parameters to most of the symbols and session APIs now was reduced while not adding more state to all the map instances by only having data that is needed to split the kernel (kallsyms and ELF symtab sections) maps and do vmlinux relocation on the main kernel map. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> LKML-Reference: <1265223128-11786-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/map.c')
-rw-r--r--tools/perf/util/map.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index c4d55a0da2ea..36ff0bf0315d 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -104,8 +104,7 @@ void map__fixup_end(struct map *self)
104 104
105#define DSO__DELETED "(deleted)" 105#define DSO__DELETED "(deleted)"
106 106
107int map__load(struct map *self, struct perf_session *session, 107int map__load(struct map *self, symbol_filter_t filter)
108 symbol_filter_t filter)
109{ 108{
110 const char *name = self->dso->long_name; 109 const char *name = self->dso->long_name;
111 int nr; 110 int nr;
@@ -113,7 +112,7 @@ int map__load(struct map *self, struct perf_session *session,
113 if (dso__loaded(self->dso, self->type)) 112 if (dso__loaded(self->dso, self->type))
114 return 0; 113 return 0;
115 114
116 nr = dso__load(self->dso, self, session, filter); 115 nr = dso__load(self->dso, self, filter);
117 if (nr < 0) { 116 if (nr < 0) {
118 if (self->dso->has_build_id) { 117 if (self->dso->has_build_id) {
119 char sbuild_id[BUILD_ID_SIZE * 2 + 1]; 118 char sbuild_id[BUILD_ID_SIZE * 2 + 1];
@@ -144,24 +143,29 @@ int map__load(struct map *self, struct perf_session *session,
144 143
145 return -1; 144 return -1;
146 } 145 }
146 /*
147 * Only applies to the kernel, as its symtabs aren't relative like the
148 * module ones.
149 */
150 if (self->dso->kernel)
151 map__reloc_vmlinux(self);
147 152
148 return 0; 153 return 0;
149} 154}
150 155
151struct symbol *map__find_symbol(struct map *self, struct perf_session *session, 156struct symbol *map__find_symbol(struct map *self, u64 addr,
152 u64 addr, symbol_filter_t filter) 157 symbol_filter_t filter)
153{ 158{
154 if (map__load(self, session, filter) < 0) 159 if (map__load(self, filter) < 0)
155 return NULL; 160 return NULL;
156 161
157 return dso__find_symbol(self->dso, self->type, addr); 162 return dso__find_symbol(self->dso, self->type, addr);
158} 163}
159 164
160struct symbol *map__find_symbol_by_name(struct map *self, const char *name, 165struct symbol *map__find_symbol_by_name(struct map *self, const char *name,
161 struct perf_session *session,
162 symbol_filter_t filter) 166 symbol_filter_t filter)
163{ 167{
164 if (map__load(self, session, filter) < 0) 168 if (map__load(self, filter) < 0)
165 return NULL; 169 return NULL;
166 170
167 if (!dso__sorted_by_name(self->dso, self->type)) 171 if (!dso__sorted_by_name(self->dso, self->type))