Re: [PATCH V3 3/4] arch/powerpc: Implement Optprobes
From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2017-01-30 20:43:40
Also in:
linuxppc-dev
Anju T Sudhakar [off-list ref] writes:
Detour buffer contains instructions to create an in memory pt_regs. After the execution of the pre-handler, a call is made for instruction emulation. The NIP is determined in advanced through dummy instruction emulation and a branch instruction is created to the NIP at the end of the trampoline. Instruction slot for detour buffer is allocated from the reserved area. For the time being, 64KB is reserved in memory for this purpose. Instructions which can be emulated using analyse_instr() are suppliants for optimization. Before optimization ensure that the address range between the detour buffer allocated and the instruction being probed is within ± 32MB. Signed-off-by: Anju T Sudhakar <redacted> Signed-off-by: Naveen N. Rao <redacted> --- .../features/debug/optprobes/arch-support.txt | 2 +- arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/kprobes.h | 24 +- arch/powerpc/include/asm/sstep.h | 1 + arch/powerpc/kernel/Makefile | 1 + arch/powerpc/kernel/optprobes.c | 331 +++++++++++++++++++++ arch/powerpc/kernel/optprobes_head.S | 135 +++++++++ arch/powerpc/lib/sstep.c | 21 ++ 8 files changed, 514 insertions(+), 2 deletions(-) create mode 100644 arch/powerpc/kernel/optprobes.c create mode 100644 arch/powerpc/kernel/optprobes_head.S
This breaks the pseries_defconfig (at least) build:
In file included from ../include/linux/kprobes.h:45:0,
from ../arch/powerpc/kernel/optprobes.c:12:
../arch/powerpc/kernel/optprobes.c: In function ‘arch_prepare_optimized_kprobe’:
../arch/powerpc/include/asm/kprobes.h:79:16: error: ‘MODULE_NAME_LEN’ undeclared (first use in this function)
char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN]; \
^
../arch/powerpc/kernel/optprobes.c:230:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("optimized_callback", op_callback_addr);
^~~~~~~~~~~~~~~~~~
../arch/powerpc/include/asm/kprobes.h:79:16: note: each undeclared identifier is reported only once for each function it appears in
char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN]; \
^
../arch/powerpc/kernel/optprobes.c:230:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("optimized_callback", op_callback_addr);
^~~~~~~~~~~~~~~~~~
../arch/powerpc/include/asm/kprobes.h:82:14: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
if ((modsym = strchr(name, ':')) != NULL) { \
^
../arch/powerpc/kernel/optprobes.c:230:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("optimized_callback", op_callback_addr);
^~~~~~~~~~~~~~~~~~
../arch/powerpc/include/asm/kprobes.h:79:7: error: unused variable ‘dot_name’ [-Werror=unused-variable]
char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN]; \
^
../arch/powerpc/kernel/optprobes.c:230:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("optimized_callback", op_callback_addr);
^~~~~~~~~~~~~~~~~~
../arch/powerpc/include/asm/kprobes.h:82:14: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
if ((modsym = strchr(name, ':')) != NULL) { \
^
../arch/powerpc/kernel/optprobes.c:231:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("emulate_step", emulate_step_addr);
^~~~~~~~~~~~~~~~~~
../arch/powerpc/include/asm/kprobes.h:79:7: error: unused variable ‘dot_name’ [-Werror=unused-variable]
char dot_name[MODULE_NAME_LEN + 1 + KSYM_NAME_LEN]; \
^
../arch/powerpc/kernel/optprobes.c:231:2: note: in expansion of macro ‘kprobe_lookup_name’
kprobe_lookup_name("emulate_step", emulate_step_addr);
^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [arch/powerpc/kernel/optprobes.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [arch/powerpc/kernel] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [sub-make] Error 2
This may not be your bug, but your patch exposes it unfortunately.
cheers