mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 22:58:29 +00:00
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>
This commit is contained in:
parent
94a24752fe
commit
247648e374
3 changed files with 42 additions and 26 deletions
|
@ -382,23 +382,30 @@ endif
|
||||||
ifdef NO_DEMANGLE
|
ifdef NO_DEMANGLE
|
||||||
BASIC_CFLAGS += -DNO_DEMANGLE
|
BASIC_CFLAGS += -DNO_DEMANGLE
|
||||||
else
|
else
|
||||||
|
|
||||||
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")
|
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")
|
||||||
|
|
||||||
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")
|
|
||||||
|
|
||||||
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")
|
|
||||||
|
|
||||||
ifeq ($(has_bfd),y)
|
ifeq ($(has_bfd),y)
|
||||||
EXTLIBS += -lbfd
|
EXTLIBS += -lbfd
|
||||||
else ifeq ($(has_bfd_iberty),y)
|
else
|
||||||
|
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")
|
||||||
|
ifeq ($(has_bfd_iberty),y)
|
||||||
EXTLIBS += -lbfd -liberty
|
EXTLIBS += -lbfd -liberty
|
||||||
else ifeq ($(has_bfd_iberty_z),y)
|
else
|
||||||
|
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")
|
||||||
|
ifeq ($(has_bfd_iberty_z),y)
|
||||||
EXTLIBS += -lbfd -liberty -lz
|
EXTLIBS += -lbfd -liberty -lz
|
||||||
|
else
|
||||||
|
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")
|
||||||
|
ifeq ($(has_cplus_demangle),y)
|
||||||
|
EXTLIBS += -liberty
|
||||||
|
BASIC_CFLAGS += -DHAVE_CPLUS_DEMANGLE
|
||||||
else
|
else
|
||||||
msg := $(warning No bfd.h/libbfd found, install binutils-dev[el] to gain symbol demangling)
|
msg := $(warning No bfd.h/libbfd found, install binutils-dev[el] to gain symbol demangling)
|
||||||
BASIC_CFLAGS += -DNO_DEMANGLE
|
BASIC_CFLAGS += -DNO_DEMANGLE
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef CC_LD_DYNPATH
|
ifndef CC_LD_DYNPATH
|
||||||
|
|
|
@ -7,23 +7,8 @@
|
||||||
#include <gelf.h>
|
#include <gelf.h>
|
||||||
#include <elf.h>
|
#include <elf.h>
|
||||||
|
|
||||||
#ifndef NO_DEMANGLE
|
|
||||||
#include <bfd.h>
|
|
||||||
#else
|
|
||||||
static inline
|
|
||||||
char *bfd_demangle(void __used *v, const char __used *c, int __used i)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const char *sym_hist_filter;
|
const char *sym_hist_filter;
|
||||||
|
|
||||||
#ifndef DMGL_PARAMS
|
|
||||||
#define DMGL_PARAMS (1 << 0) /* Include function args */
|
|
||||||
#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum dso_origin {
|
enum dso_origin {
|
||||||
DSO__ORIG_KERNEL = 0,
|
DSO__ORIG_KERNEL = 0,
|
||||||
DSO__ORIG_JAVA_JIT,
|
DSO__ORIG_JAVA_JIT,
|
||||||
|
|
|
@ -7,6 +7,30 @@
|
||||||
#include <linux/rbtree.h>
|
#include <linux/rbtree.h>
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_CPLUS_DEMANGLE
|
||||||
|
extern char *cplus_demangle(const char *, int);
|
||||||
|
|
||||||
|
static inline char *bfd_demangle(void __used *v, const char *c, int i)
|
||||||
|
{
|
||||||
|
return cplus_demangle(c, i);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#ifdef NO_DEMANGLE
|
||||||
|
static inline char *bfd_demangle(void __used *v, const char __used *c,
|
||||||
|
int __used i)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#include <bfd.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DMGL_PARAMS
|
||||||
|
#define DMGL_PARAMS (1 << 0) /* Include function args */
|
||||||
|
#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
|
||||||
|
#endif
|
||||||
|
|
||||||
struct symbol {
|
struct symbol {
|
||||||
struct rb_node rb_node;
|
struct rb_node rb_node;
|
||||||
u64 start;
|
u64 start;
|
||||||
|
|
Loading…
Add table
Reference in a new issue