I am profiling gnuradio's atsc application, which is converting raw atsc signal into mpg file.
(For those who know gnuradio, I used gnuradio-3.1.1/gr-atsc/src/python/ example)

I complied gnuradio code with
./configure --with-gprof (since this sets -pg option)

And then did
# setup oprofile
opcontrol --setup --vmlinux=my_path_to_vmlinux
opcontrol --start
opcontrol --reset
opcontrol --callgraph=5

# run atsc example ( *.py files)
xterm -e ./interp.py seinfeld.dat &
xterm -e ./xlate.py
xterm -e ./btl-fsd.py
xterm -e ./viterbi-out.py seinfeld.mpg

# get oprofile result
opcontrol --save=my_session_name
opcontrol --dump
opcontrol --stop
opreport -cl --demangle=smart session:my_session_name

I do get seinfeld.mpg correctly.
And from opreport I got the top 10 application and symbols that consumed resources.

atsci_equalizer_lms  26.466%
.loop from  libgnuradio-core.so.0.0.0 12.52%
atsci_single_viterbi 10.5%
.cleanup from libgnuradio-core.so.0.0.0 6.7%
__ieee754_atan2 from libm-2.5.so 5.53 %
.loop2 from libgnuradio-core.so.0.0.0 5.5%
memcpy from libc-2.5 so 3.03%
gr_freq_xlating_fir_filter_ccf 2.68%
atsc_fpll 1.8%

What I want to do is to find out who called .loop and .loop2 and .cleanup.

But opreport does not give me any depth.
It just says every symbol calls [self]

Do you have any idea what I should do?
The machine I tried is 64bit server with 4 cores.
for which uname -a gives
Linux 2.6.18-53.1.19.el5 #1 SMP Tue Apr 22 03:01:10 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

Any suggestion will be greatly appreciated.