I'm profiling a C++ application using linux perf, and I'm getting a nice control flow graph using GProf2dot. However, some symbols from the C library (libc6-2.13.so) take a substantial portion of the total time, and yet have no in-edges.
For example:
_int_malloc
takes 8% of the time but has no call parents.__strcmp_sse42
and__cxxabiv1::__si_class_type_info::__do_dyncast
together take about 10% of the time, and have a caller whose name is0
, which has callers2d6935c
,2cc748c
, and6
, which have no callers.
As a result, I can't find out which routines are responsible for all this mallocing and dynamic casting using just perf. However, it seems that other symbols (e.g. malloc
but not _int_malloc
) do have call parents.
Why doesn't perf show call parents for _int_malloc? Why can't I find the ultimate callers of __do_dyn_cast? And, is there some way for me to modify my setup so that I can get this information? I'm on x86-64, so I'm wondering if I need a (non-standard) libc6 with frame pointers.