[PATCH v7 0/3] arm64: implement KPROBES_ON_FTRACE
From: Jisheng Zhang
Date: Wed Dec 25 2019 - 04:41:40 EST
KPROBES_ON_FTRACE avoids much of the overhead with regular kprobes as
it eliminates the need for a trap, as well as the need to emulate or
single-step instructions.
arm64 makes use of GCC -fpatchable-function-entry=2 option to insert
two nops. When the function is traced, the first nop will be modified
to the LR saver, then the second nop to "bl <ftrace-entry>". We need
to allow kprobe on any of these two instructions.
patch1 uses ftrace_location() when [dis]arming probes.
patch2 introduces FTRACE_IP_EXTENSION to let ftrace_location()
recognise these two instructions as being part of ftrace
patch3 implement the KPROBES_ON_FTRACE for arm64
Changes since v6:
- add patch1 and patch2
- fix the automatic offset as pointed out by Masami
Changes since v5:
- rebase v5.5-rc1
- collect Acked-by and Reviewed-by tags
Changes since v4:
- correct reg->pc: probed on foo, then pre_handler see foo+0x4, while
post_handler see foo+0x8
Changes since v3:
- move kprobe_lookup_name() and arch_kprobe_on_func_entry to ftrace.c since
we only want to choose the ftrace entry for KPROBES_ON_FTRACE.
- only choose ftrace entry if (addr && !offset)
Changes since v2:
- remove patch1, make it a single cleanup patch
- remove "This patch" in the change log
- implement arm64's kprobe_lookup_name() and arch_kprobe_on_func_entry instead
of patching the common kprobes code
Changes since v1:
- make the kprobes/x86: use instruction_pointer and instruction_pointer_set
as patch1
- add Masami's ACK to patch1
- add some description about KPROBES_ON_FTRACE and why we need it on
arm64
- correct the log before the patch
- remove the consolidation patch, make it as TODO
- only adjust kprobe's addr when KPROBE_FLAG_FTRACE is set
- if KPROBES_ON_FTRACE, ftrace_call_adjust() the kprobe's addr before
calling ftrace_location()
- update the kprobes-on-ftrace/arch-support.txt in doc
Jisheng Zhang (2):
ftrace: introduce FTRACE_IP_EXTENSION
arm64: implement KPROBES_ON_FTRACE
Naveen N. Rao (1):
kprobes/ftrace: Use ftrace_location() when [dis]arming probes
.../debug/kprobes-on-ftrace/arch-support.txt | 2 +-
arch/arm64/Kconfig | 1 +
arch/arm64/include/asm/ftrace.h | 1 +
arch/arm64/kernel/probes/Makefile | 1 +
arch/arm64/kernel/probes/ftrace.c | 78 +++++++++++++++++++
include/linux/ftrace.h | 4 +
kernel/kprobes.c | 8 +-
kernel/trace/ftrace.c | 2 +-
8 files changed, 92 insertions(+), 5 deletions(-)
create mode 100644 arch/arm64/kernel/probes/ftrace.c
--
2.24.1