mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
perf symbol: C++ demangling
[acme@doppio ~]$ perf report -s comm,dso,symbol -C firefox -d /usr/lib64/xulrunner-1.9.1/libxul.so | grep :: | head
2.21% [.] nsDeque::Push(void*)
1.78% [.] GraphWalker::DoWalk(nsDeque&)
1.30% [.] GCGraphBuilder::AddNode(void*, nsCycleCollectionParticipant*)
1.27% [.] XPCWrappedNative::CallMethod(XPCCallContext&, XPCWrappedNative::CallMode)
1.18% [.] imgContainer::DrawFrameTo(gfxIImageFrame*, gfxIImageFrame*, nsRect&)
1.13% [.] nsDeque::PopFront()
1.11% [.] nsGlobalWindow::RunTimeout(nsTimeout*)
0.97% [.] nsXPConnect::Traverse(void*, nsCycleCollectionTraversalCallback&)
0.95% [.] nsJSEventListener::cycleCollection::Traverse(void*, nsCycleCollectionTraversalCallback&)
0.95% [.] nsCOMPtr_base::~nsCOMPtr_base()
[acme@doppio ~]$
Cc: Pekka Enberg <[email protected]>
Cc: Vegard Nossum <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Frédéric Weisbecker <[email protected]>
Suggested-by: Clark Williams <[email protected]>
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Peter Zijlstra <[email protected]>
LKML-Reference: <[email protected]>
This commit is contained in:
parent
dfe5a50461
commit
28ac909b49
2 changed files with 20 additions and 3 deletions
|
|
@ -345,7 +345,7 @@ BUILTIN_OBJS += builtin-stat.o
|
|||
BUILTIN_OBJS += builtin-top.o
|
||||
|
||||
PERFLIBS = $(LIB_FILE)
|
||||
EXTLIBS =
|
||||
EXTLIBS = -lbfd
|
||||
|
||||
#
|
||||
# Platform specific tweaks
|
||||
|
|
|
|||
|
|
@ -6,9 +6,15 @@
|
|||
#include <libelf.h>
|
||||
#include <gelf.h>
|
||||
#include <elf.h>
|
||||
#include <bfd.h>
|
||||
|
||||
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
|
||||
|
||||
static struct symbol *symbol__new(u64 start, u64 len,
|
||||
const char *name, unsigned int priv_size,
|
||||
u64 obj_start, int verbose)
|
||||
|
|
@ -571,6 +577,8 @@ static int dso__load_sym(struct dso *self, int fd, const char *name,
|
|||
NULL) != NULL);
|
||||
elf_symtab__for_each_symbol(syms, nr_syms, index, sym) {
|
||||
struct symbol *f;
|
||||
const char *name;
|
||||
char *demangled;
|
||||
u64 obj_start;
|
||||
struct section *section = NULL;
|
||||
int is_label = elf_sym__is_label(&sym);
|
||||
|
|
@ -609,10 +617,19 @@ static int dso__load_sym(struct dso *self, int fd, const char *name,
|
|||
goto out_elf_end;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* We need to figure out if the object was created from C++ sources
|
||||
* DWARF DW_compile_unit has this, but we don't always have access
|
||||
* to it...
|
||||
*/
|
||||
name = elf_sym__name(&sym, symstrs);
|
||||
demangled = bfd_demangle(NULL, name, DMGL_PARAMS | DMGL_ANSI);
|
||||
if (demangled != NULL)
|
||||
name = demangled;
|
||||
|
||||
f = symbol__new(sym.st_value, sym.st_size,
|
||||
elf_sym__name(&sym, symstrs),
|
||||
f = symbol__new(sym.st_value, sym.st_size, name,
|
||||
self->sym_priv_size, obj_start, verbose);
|
||||
free(demangled);
|
||||
if (!f)
|
||||
goto out_elf_end;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue