Skip to content

RFC kprobes/ftrace/x86: Function graph trace jprobes

Steven Rostedt lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest3 patches 2 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3ftrace/jprobes/x86: Allow jprobes to be graph traced if using fentryarch/x86/include/asm/ftrace.h arch/x86/include/asm/kprobes.h arch/x86/kernel/kprobes/core.c +2 more+111 -20 replies
2/3ftrace/jprobes/x86: Have function being probed be graph tracedarch/x86/include/asm/ftrace.h arch/x86/kernel/kprobes/core.c arch/x86/kernel/kprobes/ftrace.c +1 more+37 -150 replies
3/3ftrace: Rename variable from old_hash_ops to old_ops_hashkernel/trace/ftrace.c+12 -120 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [RFC][PATCH 0/3] kprobes/ftrace/x86: Function graph trace jprobes

I had these patches sitting in my repo for a while, thinking I already posted them. I never did, so here I go (a little late :-/)

Basically, what I had before was fixes for jprobes and function graph tracing that were stepping on each other. When enabling both jprobes and graph tracer, it could crash the system. The fix was just to ignore function graph tracing while handling a jprobe. This was fine for stable and fixing a bug that would usually crash, but it still messes with function graph trace. It is still required if fentry is not used, but when fentry is (which is now the majority of cases - gcc > 4.6 and x86_64), we can trace jprobes with a little trickery.

The way this solves the issue is that on the return from the jprobe, we can detect if function graph tracing happened because the stack frame would have changed. When this is detected
(saved_sp == return_to_handler), the ip is changed once again to
go preform a "fixup". The real ip is saved in r10 (callee clobber) and will be put back by the fixup trampoline.

The second patch will move ip to r10 always, and will call either the fixup (if it was modified) or will jump to ftrace_trace_addr. The ftrace_trace_addr will call the function graph code, if the ip address is set to be traced. Otherwise the function graph code ignores it (which is why it's called by all jprobe returns).

The final patch fixes the name of a variable that Masami suggesed.

Steven Rostedt (Red Hat) (3):
ftrace/jprobes/x86: Allow jprobes to be graph traced if using fentry ftrace/jprobes/x86: Have function being probed be graph traced
ftrace: Rename variable from old_hash_ops to old_ops_hash

----

 arch/x86/include/asm/ftrace.h    |  4 +++
 arch/x86/include/asm/kprobes.h   |  9 +++++
 arch/x86/kernel/kprobes/core.c   | 72 +++++++++++++++++++++++++++++++++++++++-
 arch/x86/kernel/kprobes/ftrace.c | 14 ++++++++
 arch/x86/kernel/mcount_64.S      | 36 +++++++++++++++++++-
 kernel/trace/ftrace.c            | 24 +++++++-------
 6 files changed, 145 insertions(+), 14 deletions(-)