• Adrian Hunter's avatar
    perf/x86: Add perf text poke events for kprobes · 3e46bb40
    Adrian Hunter authored
    Add perf text poke events for kprobes. That includes:
    
     - the replaced instruction(s) which are executed out-of-line
       i.e. arch_copy_kprobe() and arch_remove_kprobe()
    
     - the INT3 that activates the kprobe
       i.e. arch_arm_kprobe() and arch_disarm_kprobe()
    
     - optimised kprobe function
       i.e. arch_prepare_optimized_kprobe() and
          __arch_remove_optimized_kprobe()
    
     - optimised kprobe
       i.e. arch_optimize_kprobes() and arch_unoptimize_kprobe()
    
    Resulting in 8 possible text_poke events:
    
     0:  NULL -> probe.ainsn.insn (if ainsn.boostable && !kp.post_handler)
    					arch_copy_kprobe()
    
     1:  old0 -> INT3			arch_arm_kprobe()
    
     // boosted kprobe active
    
     2:  NULL -> optprobe_trampoline	arch_prepare_optimized_kprobe()
    
     3:  INT3,old1,old2,old3,old4 -> JMP32	arch_optimize_kprobes()
    
     // optprobe active
    
     4:  JMP32 -> INT3,old1,old2,old3,old4
    
     // optprobe disabled and kprobe active (this sometimes goes back to 3)
    					arch_unoptimize_kprobe()
    
     5:  optprobe_trampoline -> NULL	arch_remove_optimized_kprobe()
    
     // boosted kprobe active
    
     6:  INT3 -> old0			arch_disarm_kprobe()
    
     7:  probe.ainsn.insn -> NULL (if ainsn.boostable && !kp.post_handler)
    					arch_remove_kprobe()
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Link: https://lkml.kernel.org/r/20200512121922.8997-6-adrian.hunter@intel.com
    3e46bb40
opt.c 14.1 KB