diff options
| author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2009-08-11 15:22:11 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-08-12 08:10:49 -0400 |
| commit | 247648e3742ded01e42a4b14c2da330b13cbb47f (patch) | |
| tree | 8964ebe6a56f16e63b1258eda7e244d463c77554 | |
| parent | 94a24752fe95ca1e7f98b197052d44e6a207740d (diff) | |
perf tools: Fix fallback to cplus_demangle() when bfd_demangle() is not available
In old binutils we can't access bfd_demangle(), use
cplus_demangle() just like oprofile.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Luis Claudio R. Gonçalves <lclaudio@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
LKML-Reference: <20090811192211.GG18061@ghostprotocols.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | tools/perf/Makefile | 29 | ||||
| -rw-r--r-- | tools/perf/util/symbol.c | 15 | ||||
| -rw-r--r-- | tools/perf/util/symbol.h | 24 |
3 files changed, 42 insertions, 26 deletions
diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 60411e94113b..c045b4271e57 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile | |||
| @@ -382,22 +382,29 @@ endif | |||
| 382 | ifdef NO_DEMANGLE | 382 | ifdef NO_DEMANGLE |
| 383 | BASIC_CFLAGS += -DNO_DEMANGLE | 383 | BASIC_CFLAGS += -DNO_DEMANGLE |
| 384 | else | 384 | else |
| 385 | |||
| 386 | has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd > /dev/null 2>&1 && echo y") | 385 | has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd > /dev/null 2>&1 && echo y") |
| 387 | 386 | ||
| 388 | has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty > /dev/null 2>&1 && echo y") | ||
| 389 | |||
| 390 | has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty -lz > /dev/null 2>&1 && echo y") | ||
| 391 | |||
| 392 | ifeq ($(has_bfd),y) | 387 | ifeq ($(has_bfd),y) |
| 393 | EXTLIBS += -lbfd | 388 | EXTLIBS += -lbfd |
| 394 | else ifeq ($(has_bfd_iberty),y) | ||
| 395 | EXTLIBS += -lbfd -liberty | ||
| 396 | else ifeq ($(has_bfd_iberty_z),y) | ||
| 397 | EXTLIBS += -lbfd -liberty -lz | ||
| 398 | else | 389 | else |
| 399 | msg := $(warning No bfd.h/libbfd found, install binutils-dev[el] to gain symbol demangling) | 390 | has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty > /dev/null 2>&1 && echo y") |
| 400 | BASIC_CFLAGS += -DNO_DEMANGLE | 391 | ifeq ($(has_bfd_iberty),y) |
| 392 | EXTLIBS += -lbfd -liberty | ||
| 393 | else | ||
| 394 | has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty -lz > /dev/null 2>&1 && echo y") | ||
| 395 | ifeq ($(has_bfd_iberty_z),y) | ||
| 396 | EXTLIBS += -lbfd -liberty -lz | ||
| 397 | else | ||
| 398 | has_cplus_demangle := $(shell sh -c "(echo 'extern char *cplus_demangle(const char *, int);'; echo 'int main(void) { cplus_demangle(0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -liberty > /dev/null 2>&1 && echo y") | ||
| 399 | ifeq ($(has_cplus_demangle),y) | ||
| 400 | EXTLIBS += -liberty | ||
| 401 | BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE | ||
| 402 | else | ||
| 403 | msg := $(warning No bfd.h/libbfd found, install binutils-dev[el] to gain symbol demangling) | ||
| 404 | BASIC_CFLAGS += -DNO_DEMANGLE | ||
| 405 | endif | ||
| 406 | endif | ||
| 407 | endif | ||
| 401 | endif | 408 | endif |
| 402 | endif | 409 | endif |
| 403 | 410 | ||
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index f1dcede14307..2473fd427beb 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
| @@ -7,23 +7,8 @@ | |||
| 7 | #include <gelf.h> | 7 | #include <gelf.h> |
| 8 | #include <elf.h> | 8 | #include <elf.h> |
| 9 | 9 | ||
| 10 | #ifndef NO_DEMANGLE | ||
| 11 | #include <bfd.h> | ||
| 12 | #else | ||
| 13 | static inline | ||
| 14 | char *bfd_demangle(void __used *v, const char __used *c, int __used i) | ||
| 15 | { | ||
| 16 | return NULL; | ||
| 17 | } | ||
| 18 | #endif | ||
| 19 | |||
| 20 | const char *sym_hist_filter; | 10 | const char *sym_hist_filter; |
| 21 | 11 | ||
| 22 | #ifndef DMGL_PARAMS | ||
| 23 | #define DMGL_PARAMS (1 << 0) /* Include function args */ | ||
| 24 | #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ | ||
| 25 | #endif | ||
| 26 | |||
| 27 | enum dso_origin { | 12 | enum dso_origin { |
| 28 | DSO__ORIG_KERNEL = 0, | 13 | DSO__ORIG_KERNEL = 0, |
| 29 | DSO__ORIG_JAVA_JIT, | 14 | DSO__ORIG_JAVA_JIT, |
diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h index 1e003ec2f4b1..b53bf0125c1b 100644 --- a/tools/perf/util/symbol.h +++ b/tools/perf/util/symbol.h | |||
| @@ -7,6 +7,30 @@ | |||
| 7 | #include <linux/rbtree.h> | 7 | #include <linux/rbtree.h> |
| 8 | #include "module.h" | 8 | #include "module.h" |
| 9 | 9 | ||
| 10 | #ifdef HAVE_CPLUS_DEMANGLE | ||
| 11 | extern char *cplus_demangle(const char *, int); | ||
| 12 | |||
| 13 | static inline char *bfd_demangle(void __used *v, const char *c, int i) | ||
| 14 | { | ||
| 15 | return cplus_demangle(c, i); | ||
| 16 | } | ||
| 17 | #else | ||
| 18 | #ifdef NO_DEMANGLE | ||
| 19 | static inline char *bfd_demangle(void __used *v, const char __used *c, | ||
| 20 | int __used i) | ||
| 21 | { | ||
| 22 | return NULL; | ||
| 23 | } | ||
| 24 | #else | ||
| 25 | #include <bfd.h> | ||
| 26 | #endif | ||
| 27 | #endif | ||
| 28 | |||
| 29 | #ifndef DMGL_PARAMS | ||
| 30 | #define DMGL_PARAMS (1 << 0) /* Include function args */ | ||
| 31 | #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ | ||
| 32 | #endif | ||
| 33 | |||
| 10 | struct symbol { | 34 | struct symbol { |
| 11 | struct rb_node rb_node; | 35 | struct rb_node rb_node; |
| 12 | u64 start; | 36 | u64 start; |
