Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARC/kprobes: Remove jprobe implementation

Remove arch dependent setjump/longjump functions
and unused fields in kprobe_ctlblk for jprobes
from arch/arc.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: linux-arch@vger.kernel.org
Cc: linux-snps-arc@lists.infradead.org
Link: https://lore.kernel.org/lkml/152942436460.15209.3038881268172249579.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Masami Hiramatsu and committed by
Ingo Molnar
e00f1993 80006dbe

+2 -38
-2
arch/arc/include/asm/kprobes.h
··· 45 45 46 46 struct kprobe_ctlblk { 47 47 unsigned int kprobe_status; 48 - struct pt_regs jprobe_saved_regs; 49 - char jprobes_stack[MAX_STACK_SIZE]; 50 48 struct prev_kprobe prev_kprobe; 51 49 }; 52 50
+2 -36
arch/arc/kernel/kprobes.c
··· 225 225 226 226 /* If we have no pre-handler or it returned 0, we continue with 227 227 * normal processing. If we have a pre-handler and it returned 228 - * non-zero - which is expected from setjmp_pre_handler for 229 - * jprobe, we return without single stepping and leave that to 230 - * the break-handler which is invoked by a kprobe from 231 - * jprobe_return 228 + * non-zero - which means user handler setup registers to exit 229 + * to another instruction, we must skip the single stepping. 232 230 */ 233 231 if (!p->pre_handler || !p->pre_handler(p, regs)) { 234 232 setup_singlestep(p, regs); ··· 382 384 } 383 385 384 386 return ret; 385 - } 386 - 387 - int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) 388 - { 389 - struct jprobe *jp = container_of(p, struct jprobe, kp); 390 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 391 - unsigned long sp_addr = regs->sp; 392 - 393 - kcb->jprobe_saved_regs = *regs; 394 - memcpy(kcb->jprobes_stack, (void *)sp_addr, MIN_STACK_SIZE(sp_addr)); 395 - regs->ret = (unsigned long)(jp->entry); 396 - 397 - return 1; 398 - } 399 - 400 - void __kprobes jprobe_return(void) 401 - { 402 - __asm__ __volatile__("unimp_s"); 403 - return; 404 - } 405 - 406 - int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 407 - { 408 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 409 - unsigned long sp_addr; 410 - 411 - *regs = kcb->jprobe_saved_regs; 412 - sp_addr = regs->sp; 413 - memcpy((void *)sp_addr, kcb->jprobes_stack, MIN_STACK_SIZE(sp_addr)); 414 - preempt_enable_no_resched(); 415 - 416 - return 1; 417 387 } 418 388 419 389 static void __used kretprobe_trampoline_holder(void)