aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@infradead.org>2010-02-25 10:57:40 -0500
committerIngo Molnar <mingo@elte.hu>2010-02-25 11:39:14 -0500
commit628ada0cb03666dd463f7c25947eaccdf440c309 (patch)
tree2338cf888ccecb1bb9df32031cef43f527b05ca0 /tools/perf/util
parent3846df2e0a99a2bf10023de0e9c1496592012d4c (diff)
perf annotate: Defer allocating sym_priv->hist array
Because symbol->end is not fixed up at symbol_filter time, only after all symbols for a DSO are loaded, and that, for asm symbols, may be bogus, causing segfaults when hits happen in these symbols. Reported-by: David Miller <davem@davemloft.net> Reported-by: Anton Blanchard <anton@samba.org> Acked-by: David Miller <davem@davemloft.net> 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> Cc: <stable@kernel.org> # for .33.x. Does not apply cleanly, needs backport. LKML-Reference: <20100225155740.GB8553@ghostprotocols.net> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util')
-rw-r--r--tools/perf/util/symbol.c2
-rw-r--r--tools/perf/util/symbol.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 7aab4e5f3669..323c0aea0a91 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -144,7 +144,7 @@ static struct symbol *symbol__new(u64 start, u64 len, const char *name)
144 return self; 144 return self;
145} 145}
146 146
147static void symbol__delete(struct symbol *self) 147void symbol__delete(struct symbol *self)
148{ 148{
149 free(((void *)self) - symbol_conf.priv_size); 149 free(((void *)self) - symbol_conf.priv_size);
150} 150}
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
index 1b4192ee5300..280dadd32a08 100644
--- a/tools/perf/util/symbol.h
+++ b/tools/perf/util/symbol.h
@@ -51,6 +51,8 @@ struct symbol {
51 char name[0]; 51 char name[0];
52}; 52};
53 53
54void symbol__delete(struct symbol *self);
55
54struct strlist; 56struct strlist;
55 57
56struct symbol_conf { 58struct symbol_conf {