Skip to contentSkip to conversation

mips-specific ftrace support

PATCH New [email protected] 1 participant 1 message May 28, 2009 MIPS

lore
Share & tools
lore
#0 lore raw

cover mips-specific ftrace support

From: Wu Zhangjin <[email protected]>

ftrace is a mcount based kernel tracing tool/framework, which is originally from RT_PREEMPT(http://rt.wiki.kernel.org).

ftrace is short for function tracer, this is its original name, but now, it becomes a kernel tracing framework, lots of kernel tracers are built on it, such as irqoff tracer, wakeup tracer and so forth. these tracers are arch-independent(?), but some of them are arch-dependent, such as the original
ftrace: function tracer, and dynamic function tracer, function graph tracer, and also, system call tracer.

here is the mips porting of these four arch-dependent tracers, it will enable the following new kernel config options in linux-mips system.

kernel hacking --->
Tracers -->
[*] Kernel Function Tracer
[*] Kernel Function Graph Tracer
...
[*] Trace syscalls
...
[*] enable/disable ftrace tracepoints dynamically

in reality, because the high-precise timestamp getting function are arch-dependent, lots of the tracers are arch-dependent. the arch-dependent part is that: sched_clock, or we say ring_buffer_time_stamp or trace_clock_local function. to get high-precise timestamp, we can read the MIPS clock counter, but since it is only 32bit long, so, overflow should be handled carefully.

read the following document, and play with it:
Documentation/trace/ftrace.txt

Wu Zhangjin (5):
mips static function tracer support
mips dynamic function tracer support
mips function graph tracer support
mips specific clock function to get precise timestamp mips specific system call tracer

 arch/mips/Kconfig                   |    7 +
 arch/mips/Makefile                  |    2 +
 arch/mips/include/asm/ftrace.h      |   35 ++++-
 arch/mips/include/asm/ptrace.h      |    2 +
 arch/mips/include/asm/reg.h         |    5 +
 arch/mips/include/asm/syscall.h     |   84 ++++++++
 arch/mips/include/asm/thread_info.h |    5 +-
 arch/mips/kernel/Makefile           |   13 ++
 arch/mips/kernel/csrc-r4k.c         |    2 +-
 arch/mips/kernel/entry.S            |    2 +-
 arch/mips/kernel/ftrace.c           |  360 +++++++++++++++++++++++++++++++++++
 arch/mips/kernel/ftrace_clock.c     |   77 ++++++++
 arch/mips/kernel/mcount.S           |  185 ++++++++++++++++++
 arch/mips/kernel/mips_ksyms.c       |    5 +
 arch/mips/kernel/ptrace.c           |   14 ++-
 arch/mips/kernel/scall64-o32.S      |    2 +-
 arch/mips/kernel/vmlinux.lds.S      |    1 +
 kernel/trace/ring_buffer.c          |    3 +-
 kernel/trace/trace_clock.c          |    2 +-
 scripts/Makefile.build              |    1 +
 scripts/recordmcount.pl             |   32 +++-
 21 files changed, 824 insertions(+), 15 deletions(-)
 create mode 100644 arch/mips/include/asm/syscall.h
 create mode 100644 arch/mips/kernel/ftrace.c
 create mode 100644 arch/mips/kernel/ftrace_clock.c
 create mode 100644 arch/mips/kernel/mcount.S