All of lore.kernel.org
 help / color / mirror / Atom feed
* No source code for static library (compiled with -g -ggdb)
@ 2016-04-28 17:44 Mark Davis
  2016-04-28 22:16 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 8+ messages in thread
From: Mark Davis @ 2016-04-28 17:44 UTC (permalink / raw)
  To: linux-perf-users

Hello, I'm using perf record and perf report to profile an application
which is made from a static (.a) library file that I made as well as a
handful of C++ files that are not in the static library. They are all
compiled with "-g -ggdb -fno-inline -O2 -fno-omit-frame-pointer" and
all linked together to create the application.

When I use perf report (in interactive/tui mode), when I annotate the
symbols that are in the C++ files (not the static library), I see the
source code intermingled with the assembly (this is what I want). I
can do this at any layer of the call stack. However, when I drill into
the symbols that are from the static library, I just see the assembly
of the leaf symbol. I don't expect to see the source in this case, as
the leaf symbol is a low-level library from libc; but, perf report
won't let me drill into (i.e., annotate) any non-leaf symbols.

Example:
execute_native_thread_routine
std::_Bind_simple<int (*(int, char**, Thread*))(int, char**,
Thread*)>::operator()()
main(int, char**)
my_func_A
my_func_B
malloc

When I annotate my_func_A and my_func_B, it just jumps to the
annotation of malloc (I see this listed at the top of the annotation
view). Note that my_func_A and my_func_B are both defined in the
static library that I'm linking in. However, when I do a similar thing
with a different stack where I'm annotating a function that's not from
the static library (but in the regular C++ files), it works fine.

Here's what I'm doing to create my static lib:
ar -cvrs $@ $(OBJS)


I did confirm with nm --debug-syms that my static lib has debugging
symbols in it:

U __assert_fail
0000000000000000 b .bss
0000000000000000 n .comment
U __cxa_atexit
0000000000000000 d .data
0000000000000000 N .debug_abbrev
0000000000000000 N .debug_aranges
0000000000000000 N .debug_info
0000000000000000 N .debug_line
0000000000000000 N .debug_loc
0000000000000000 N .debug_ranges
0000000000000000 N .debug_str
U __dso_handle
0000000000000000 r .eh_frame
U exit


How can I compile and link my application and configure perf report so
I can drill in like this on functions defined in a static library with
debug symbols?

Thank you,
Mark

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-08-16 20:14 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-28 17:44 No source code for static library (compiled with -g -ggdb) Mark Davis
2016-04-28 22:16 ` Arnaldo Carvalho de Melo
2016-04-29 12:28   ` Mark Davis
2016-04-29 13:26     ` Mark Davis
2016-05-02  7:58       ` Milian Wolff
2016-08-16 20:14         ` Mark Davis
2016-04-29 14:45     ` Arnaldo Carvalho de Melo
2016-04-30 23:49       ` Mark Davis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.