aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/event.c26
-rw-r--r--tools/perf/util/thread.h5
2 files changed, 22 insertions, 9 deletions
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index 1abaefc126a8..5a6e827a09eb 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -422,11 +422,10 @@ int event__process_task(event_t *self, struct perf_session *session)
422 return 0; 422 return 0;
423} 423}
424 424
425void thread__find_addr_location(struct thread *self, 425void thread__find_addr_map(struct thread *self,
426 struct perf_session *session, u8 cpumode, 426 struct perf_session *session, u8 cpumode,
427 enum map_type type, u64 addr, 427 enum map_type type, u64 addr,
428 struct addr_location *al, 428 struct addr_location *al)
429 symbol_filter_t filter)
430{ 429{
431 struct map_groups *mg = &self->mg; 430 struct map_groups *mg = &self->mg;
432 431
@@ -441,7 +440,6 @@ void thread__find_addr_location(struct thread *self,
441 else { 440 else {
442 al->level = 'H'; 441 al->level = 'H';
443 al->map = NULL; 442 al->map = NULL;
444 al->sym = NULL;
445 return; 443 return;
446 } 444 }
447try_again: 445try_again:
@@ -460,11 +458,21 @@ try_again:
460 mg = &session->kmaps; 458 mg = &session->kmaps;
461 goto try_again; 459 goto try_again;
462 } 460 }
463 al->sym = NULL; 461 } else
464 } else {
465 al->addr = al->map->map_ip(al->map, al->addr); 462 al->addr = al->map->map_ip(al->map, al->addr);
463}
464
465void thread__find_addr_location(struct thread *self,
466 struct perf_session *session, u8 cpumode,
467 enum map_type type, u64 addr,
468 struct addr_location *al,
469 symbol_filter_t filter)
470{
471 thread__find_addr_map(self, session, cpumode, type, addr, al);
472 if (al->map != NULL)
466 al->sym = map__find_symbol(al->map, session, al->addr, filter); 473 al->sym = map__find_symbol(al->map, session, al->addr, filter);
467 } 474 else
475 al->sym = NULL;
468} 476}
469 477
470static void dso__calc_col_width(struct dso *self) 478static void dso__calc_col_width(struct dso *self)
diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h
index c06c13535a70..e35653c1817c 100644
--- a/tools/perf/util/thread.h
+++ b/tools/perf/util/thread.h
@@ -48,6 +48,11 @@ static inline struct map *thread__find_map(struct thread *self,
48 return self ? map_groups__find(&self->mg, type, addr) : NULL; 48 return self ? map_groups__find(&self->mg, type, addr) : NULL;
49} 49}
50 50
51void thread__find_addr_map(struct thread *self,
52 struct perf_session *session, u8 cpumode,
53 enum map_type type, u64 addr,
54 struct addr_location *al);
55
51void thread__find_addr_location(struct thread *self, 56void thread__find_addr_location(struct thread *self,
52 struct perf_session *session, u8 cpumode, 57 struct perf_session *session, u8 cpumode,
53 enum map_type type, u64 addr, 58 enum map_type type, u64 addr,