tracing: identify which executable object the userspace address belongs to
authorTörök Edwin <edwintorok@gmail.com>
Sat, 22 Nov 2008 11:28:48 +0000 (13:28 +0200)
committerIngo Molnar <mingo@elte.hu>
Sun, 23 Nov 2008 08:45:42 +0000 (09:45 +0100)
commitb54d3de9f3b8956653b06f1a32e9f9321c6d9027
treefef98e07a9327371304811191cafebdd65311502
parent74e2f334f4440cbcb63e9ebbcdcea430d41bdfa3
tracing: identify which executable object the userspace address belongs to

Impact: modify+improve the userstacktrace tracing visualization feature

Store thread group leader id, and use it to lookup the address in the
process's map. We could have looked up the address on thread's map,
but the thread might not exist by the time we are called. The process
might not exist either, but if you are reading trace_pipe, that is
unlikely.

Example usage:

 mount -t debugfs nodev /sys/kernel/debug
 cd /sys/kernel/debug/tracing
 echo userstacktrace >iter_ctrl
 echo sym-userobj >iter_ctrl
 echo sched_switch >current_tracer
 echo 1 >tracing_enabled
 cat trace_pipe >/tmp/trace&
 .... run application ...
 echo 0 >tracing_enabled
 cat /tmp/trace

You'll see stack entries like:

   /lib/libpthread-2.7.so[+0xd370]

You can convert them to function/line using:

   addr2line -fie /lib/libpthread-2.7.so 0xd370

Or:

   addr2line -fie /usr/lib/debug/libpthread-2.7.so 0xd370

For non-PIC/PIE executables this won't work:

   a.out[+0x73b]

You need to run the following: addr2line -fie a.out 0x40073b
(where 0x400000 is the default load address of a.out)

Signed-off-by: Török Edwin <edwintorok@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Documentation/ftrace.txt
kernel/trace/trace.c
kernel/trace/trace.h