diff options
Diffstat (limited to 'tools/perf/util/session.c')
-rw-r--r-- | tools/perf/util/session.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 105f00bfd555..b58a48a5e5a9 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c | |||
@@ -242,17 +242,16 @@ static bool symbol__match_parent_regex(struct symbol *sym) | |||
242 | return 0; | 242 | return 0; |
243 | } | 243 | } |
244 | 244 | ||
245 | struct map_symbol *perf_session__resolve_callchain(struct perf_session *self, | 245 | int perf_session__resolve_callchain(struct perf_session *self, |
246 | struct thread *thread, | 246 | struct thread *thread, |
247 | struct ip_callchain *chain, | 247 | struct ip_callchain *chain, |
248 | struct symbol **parent) | 248 | struct symbol **parent) |
249 | { | 249 | { |
250 | u8 cpumode = PERF_RECORD_MISC_USER; | 250 | u8 cpumode = PERF_RECORD_MISC_USER; |
251 | unsigned int i; | 251 | unsigned int i; |
252 | struct map_symbol *syms = calloc(chain->nr, sizeof(*syms)); | 252 | int err; |
253 | 253 | ||
254 | if (!syms) | 254 | callchain_cursor_reset(&self->callchain_cursor); |
255 | return NULL; | ||
256 | 255 | ||
257 | for (i = 0; i < chain->nr; i++) { | 256 | for (i = 0; i < chain->nr; i++) { |
258 | u64 ip = chain->ips[i]; | 257 | u64 ip = chain->ips[i]; |
@@ -281,12 +280,15 @@ struct map_symbol *perf_session__resolve_callchain(struct perf_session *self, | |||
281 | *parent = al.sym; | 280 | *parent = al.sym; |
282 | if (!symbol_conf.use_callchain) | 281 | if (!symbol_conf.use_callchain) |
283 | break; | 282 | break; |
284 | syms[i].map = al.map; | ||
285 | syms[i].sym = al.sym; | ||
286 | } | 283 | } |
284 | |||
285 | err = callchain_cursor_append(&self->callchain_cursor, | ||
286 | ip, al.map, al.sym); | ||
287 | if (err) | ||
288 | return err; | ||
287 | } | 289 | } |
288 | 290 | ||
289 | return syms; | 291 | return 0; |
290 | } | 292 | } |
291 | 293 | ||
292 | static int process_event_synth_stub(event_t *event __used, | 294 | static int process_event_synth_stub(event_t *event __used, |