perf symbols: Create thread__find_addr_map from thread__find_addr_location
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 15 Jan 2010 01:45:29 +0000 (23:45 -0200)
committerIngo Molnar <mingo@elte.hu>
Sat, 16 Jan 2010 09:58:48 +0000 (10:58 +0100)
Because some tools will only want to know with maps had hits,
not needing the full symbol resolution done by
thread__find_addr_location.

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: <1263519930-22803-3-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
tools/perf/util/event.c
tools/perf/util/thread.h

index 1abaefc126a861bcf9b0aec0ffabe5a096523553..5a6e827a09eba67a901c847c47f0988dfe4710cb 100644 (file)
@@ -422,11 +422,10 @@ int event__process_task(event_t *self, struct perf_session *session)
        return 0;
 }
 
-void thread__find_addr_location(struct thread *self,
-                               struct perf_session *session, u8 cpumode,
-                               enum map_type type, u64 addr,
-                               struct addr_location *al,
-                               symbol_filter_t filter)
+void thread__find_addr_map(struct thread *self,
+                          struct perf_session *session, u8 cpumode,
+                          enum map_type type, u64 addr,
+                          struct addr_location *al)
 {
        struct map_groups *mg = &self->mg;
 
@@ -441,7 +440,6 @@ void thread__find_addr_location(struct thread *self,
        else {
                al->level = 'H';
                al->map = NULL;
-               al->sym = NULL;
                return;
        }
 try_again:
@@ -460,11 +458,21 @@ try_again:
                        mg = &session->kmaps;
                        goto try_again;
                }
-               al->sym = NULL;
-       } else {
+       } else
                al->addr = al->map->map_ip(al->map, al->addr);
+}
+
+void thread__find_addr_location(struct thread *self,
+                               struct perf_session *session, u8 cpumode,
+                               enum map_type type, u64 addr,
+                               struct addr_location *al,
+                               symbol_filter_t filter)
+{
+       thread__find_addr_map(self, session, cpumode, type, addr, al);
+       if (al->map != NULL)
                al->sym = map__find_symbol(al->map, session, al->addr, filter);
-       }
+       else
+               al->sym = NULL;
 }
 
 static void dso__calc_col_width(struct dso *self)
index c06c13535a7025bf2bc04235e961c63dd5d828fc..e35653c1817c88780347d8f51876fcee1687c401 100644 (file)
@@ -48,6 +48,11 @@ static inline struct map *thread__find_map(struct thread *self,
        return self ? map_groups__find(&self->mg, type, addr) : NULL;
 }
 
+void thread__find_addr_map(struct thread *self,
+                          struct perf_session *session, u8 cpumode,
+                          enum map_type type, u64 addr,
+                          struct addr_location *al);
+
 void thread__find_addr_location(struct thread *self,
                                struct perf_session *session, u8 cpumode,
                                enum map_type type, u64 addr,