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

sparc64/kprobes: Remove jprobe implementation

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

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: David S. Miller <davem@davemloft.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-arch@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Link: https://lore.kernel.org/lkml/152942459795.15209.9736720668494241853.stgit@devbox
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Masami Hiramatsu and committed by
Ingo Molnar
e9bf11a5 8a4b11a2

-48
-1
arch/sparc/include/asm/kprobes.h
··· 44 44 unsigned long kprobe_status; 45 45 unsigned long kprobe_orig_tnpc; 46 46 unsigned long kprobe_orig_tstate_pil; 47 - struct pt_regs jprobe_saved_regs; 48 47 struct prev_kprobe prev_kprobe; 49 48 }; 50 49
-47
arch/sparc/kernel/kprobes.c
··· 441 441 exception_exit(prev_state); 442 442 } 443 443 444 - /* Jprobes support. */ 445 - int __kprobes setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs) 446 - { 447 - struct jprobe *jp = container_of(p, struct jprobe, kp); 448 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 449 - 450 - memcpy(&(kcb->jprobe_saved_regs), regs, sizeof(*regs)); 451 - 452 - regs->tpc = (unsigned long) jp->entry; 453 - regs->tnpc = ((unsigned long) jp->entry) + 0x4UL; 454 - regs->tstate |= TSTATE_PIL; 455 - 456 - return 1; 457 - } 458 - 459 - void __kprobes jprobe_return(void) 460 - { 461 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 462 - register unsigned long orig_fp asm("g1"); 463 - 464 - orig_fp = kcb->jprobe_saved_regs.u_regs[UREG_FP]; 465 - __asm__ __volatile__("\n" 466 - "1: cmp %%sp, %0\n\t" 467 - "blu,a,pt %%xcc, 1b\n\t" 468 - " restore\n\t" 469 - ".globl jprobe_return_trap_instruction\n" 470 - "jprobe_return_trap_instruction:\n\t" 471 - "ta 0x70" 472 - : /* no outputs */ 473 - : "r" (orig_fp)); 474 - } 475 - 476 - extern void jprobe_return_trap_instruction(void); 477 - 478 - int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs) 479 - { 480 - u32 *addr = (u32 *) regs->tpc; 481 - struct kprobe_ctlblk *kcb = get_kprobe_ctlblk(); 482 - 483 - if (addr == (u32 *) jprobe_return_trap_instruction) { 484 - memcpy(regs, &(kcb->jprobe_saved_regs), sizeof(*regs)); 485 - preempt_enable_no_resched(); 486 - return 1; 487 - } 488 - return 0; 489 - } 490 - 491 444 /* The value stored in the return address register is actually 2 492 445 * instructions before where the callee will return to. 493 446 * Sequences usually look something like this