diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2009-08-05 08:05:16 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-08-05 08:12:08 -0400 |
commit | 2cdbc46d7b2cb0acb68c3ecad93b000552121fa6 (patch) | |
tree | f56deaa9e5c3c030d1a0c53a158a43a3212759d8 | |
parent | 114cfab222233f50f46d7162cf7d99fdc6c271e5 (diff) |
perf: Auto-detect libbfd
Since the C++ demangling isn't needed for everybody and
bfd/iberty aren't widely/easily available on all machines, make
it optional.
It also allows you to forcefully disable demangling by using
NO_DEMANGLE=1 and otherwise tries to detect libbfd/libiberty
combinations that result in a compiling demangler.
Reported-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Kyle McMartin <kyle@mcmartin.ca>
LKML-Reference: <20090801082048.GX12579@kernel.dk>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | tools/perf/Makefile | 18 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 9 |
2 files changed, 26 insertions, 1 deletions
diff --git a/tools/perf/Makefile b/tools/perf/Makefile index 4b20fa47c3ab..ff905aceb4fd 100644 --- a/tools/perf/Makefile +++ b/tools/perf/Makefile | |||
@@ -345,7 +345,6 @@ BUILTIN_OBJS += builtin-stat.o | |||
345 | BUILTIN_OBJS += builtin-top.o | 345 | BUILTIN_OBJS += builtin-top.o |
346 | 346 | ||
347 | PERFLIBS = $(LIB_FILE) | 347 | PERFLIBS = $(LIB_FILE) |
348 | EXTLIBS = -lbfd -liberty | ||
349 | 348 | ||
350 | # | 349 | # |
351 | # Platform specific tweaks | 350 | # Platform specific tweaks |
@@ -374,6 +373,23 @@ ifeq ($(uname_S),Darwin) | |||
374 | PTHREAD_LIBS = | 373 | PTHREAD_LIBS = |
375 | endif | 374 | endif |
376 | 375 | ||
376 | ifdef NO_DEMANGLE | ||
377 | BASIC_CFLAGS += -DNO_DEMANGLE | ||
378 | else | ||
379 | |||
380 | has_bfd := $(shell sh -c "(echo '\#include <stdio.h>'; echo '\#include <bfd.h>'; echo '\#ifndef DMGL_PARAMS'; echo '\#define DMGL_PARAMS (1 << 0)'; echo '\#define DMGL_ANSI (1 << 1)'; echo '\#endif'; echo 'int main(int argc, char **argv) { bfd_demangle(NULL, argv[0], DMGL_PARAMS | DMGL_ANSI); return 0; }') | gcc -x c - -lbfd > /dev/null 2>&1 && echo y") | ||
381 | |||
382 | has_bfd_iberty := $(shell sh -c "(echo '\#include <stdio.h>'; echo '\#include <bfd.h>'; echo '\#ifndef DMGL_PARAMS'; echo '\#define DMGL_PARAMS (1 << 0)'; echo '\#define DMGL_ANSI (1 << 1)'; echo '\#endif'; echo 'int main(int argc, char **argv) { bfd_demangle(NULL, argv[0], DMGL_PARAMS | DMGL_ANSI); return 0; }') | gcc -x c - -lbfd -liberty > /dev/null 2>&1 && echo y") | ||
383 | |||
384 | ifeq ($(has_bfd),y) | ||
385 | EXTLIBS += -lbfd | ||
386 | else ifeq ($(has_bfd_iberty),y) | ||
387 | EXTLIBS += -lbfd -liberty | ||
388 | else | ||
389 | BASIC_CFLAGS += -DNO_DEMANGLE | ||
390 | endif | ||
391 | endif | ||
392 | |||
377 | ifndef CC_LD_DYNPATH | 393 | ifndef CC_LD_DYNPATH |
378 | ifdef NO_R_TO_GCC_LINKER | 394 | ifdef NO_R_TO_GCC_LINKER |
379 | # Some gcc does not accept and pass -R to the linker to specify | 395 | # Some gcc does not accept and pass -R to the linker to specify |
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index b4fe0579bd6b..0580b94785e7 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c | |||
@@ -6,7 +6,16 @@ | |||
6 | #include <libelf.h> | 6 | #include <libelf.h> |
7 | #include <gelf.h> | 7 | #include <gelf.h> |
8 | #include <elf.h> | 8 | #include <elf.h> |
9 | |||
10 | #ifndef NO_DEMANGLE | ||
9 | #include <bfd.h> | 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 | ||
10 | 19 | ||
11 | const char *sym_hist_filter; | 20 | const char *sym_hist_filter; |
12 | 21 | ||