aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/map.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-10-20 12:25:40 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-20 15:12:58 -0400
commite42049926ebdcae24fdfdc8f0e3ff8f05f24a60b (patch)
treebe0a07b62070aef5edcd64d84e12e04950220590 /tools/perf/util/map.c
parented52ce2e3c33dc7626a40fa2da766d1a6460e543 (diff)
perf annotate: Use the sym_priv_size area for the histogram
We have this sym_priv_size mechanism for attaching private areas to struct symbol entries but annotate wasn't using it, adding private areas to struct symbol in addition to a ->priv pointer. Scrap all that and use the sym_priv_size mechanism. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Mike Galbraith <efault@gmx.de> LKML-Reference: <1256055940-19511-1-git-send-email-acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/map.c')
-rw-r--r--tools/perf/util/map.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c
index 4e203d144f9e..55079c0200e0 100644
--- a/tools/perf/util/map.c
+++ b/tools/perf/util/map.c
@@ -3,6 +3,7 @@
3#include <stdlib.h> 3#include <stdlib.h>
4#include <string.h> 4#include <string.h>
5#include <stdio.h> 5#include <stdio.h>
6#include "debug.h"
6 7
7static inline int is_anon_memory(const char *filename) 8static inline int is_anon_memory(const char *filename)
8{ 9{
@@ -19,7 +20,9 @@ static int strcommon(const char *pathname, char *cwd, int cwdlen)
19 return n; 20 return n;
20} 21}
21 22
22 struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen) 23struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen,
24 unsigned int sym_priv_size, symbol_filter_t filter,
25 int v)
23{ 26{
24 struct map *self = malloc(sizeof(*self)); 27 struct map *self = malloc(sizeof(*self));
25 28
@@ -27,6 +30,7 @@ static int strcommon(const char *pathname, char *cwd, int cwdlen)
27 const char *filename = event->filename; 30 const char *filename = event->filename;
28 char newfilename[PATH_MAX]; 31 char newfilename[PATH_MAX];
29 int anon; 32 int anon;
33 bool new_dso;
30 34
31 if (cwd) { 35 if (cwd) {
32 int n = strcommon(filename, cwd, cwdlen); 36 int n = strcommon(filename, cwd, cwdlen);
@@ -49,10 +53,23 @@ static int strcommon(const char *pathname, char *cwd, int cwdlen)
49 self->end = event->start + event->len; 53 self->end = event->start + event->len;
50 self->pgoff = event->pgoff; 54 self->pgoff = event->pgoff;
51 55
52 self->dso = dsos__findnew(filename); 56 self->dso = dsos__findnew(filename, sym_priv_size, &new_dso);
53 if (self->dso == NULL) 57 if (self->dso == NULL)
54 goto out_delete; 58 goto out_delete;
55 59
60 if (new_dso) {
61 int nr = dso__load(self->dso, self, filter, v);
62
63 if (nr < 0)
64 eprintf("Failed to open %s, continuing "
65 "without symbols\n",
66 self->dso->long_name);
67 else if (nr == 0)
68 eprintf("No symbols found in %s, maybe "
69 "install a debug package?\n",
70 self->dso->long_name);
71 }
72
56 if (self->dso == vdso || anon) 73 if (self->dso == vdso || anon)
57 self->map_ip = self->unmap_ip = identity__map_ip; 74 self->map_ip = self->unmap_ip = identity__map_ip;
58 else { 75 else {