• Wang Nan's avatar
    perf probe: Support probing at absolute address · da15bd9d
    Wang Nan authored
    It should be useful to allow 'perf probe' probe at absolute offset of a
    target. For example, when (u)probing at a instruction of a shared object
    in a embedded system where debuginfo is not avaliable but we know the
    offset of that instruction by manually digging.
    
    This patch enables following perf probe command syntax:
    
      # perf probe 0xffffffff811e6615
    
    And
    
      # perf probe /lib/x86_64-linux-gnu/libc-2.19.so 0xeb860
    
    In the above example, we don't need a anchor symbol, so it is possible
    to compute absolute addresses using other methods and then use 'perf
    probe' to create the probing points.
    
    v1 -> v2:
      Drop the leading '+' in cmdline;
      Allow uprobing at offset 0x0;
      Improve 'perf probe -l' result when uprobe at area without debuginfo.
    
    v2 -> v3:
      Split bugfix to a separated patch.
    
    Test result:
    
      # perf probe 0xffffffff8119d175 %ax
      # perf probe sys_write %ax
      # perf probe /lib64/libc-2.18.so 0x0 %ax
      # perf probe /lib64/libc-2.18.so 0x5 %ax
      # perf probe /lib64/libc-2.18.so 0xd8e40 %ax
      # perf probe /lib64/libc-2.18.so __write %ax
      # perf probe /lib64/libc-2.18.so 0xd8e49 %ax
      # cat /sys/kernel/debug/tracing/uprobe_events
    
      p:probe_libc/abs_0 /lib64/libc-2.18.so:0x          (null) arg1=%ax
      p:probe_libc/abs_5 /lib64/libc-2.18.so:0x0000000000000005 arg1=%ax
      p:probe_libc/abs_d8e40 /lib64/libc-2.18.so:0x00000000000d8e40 arg1=%ax
      p:probe_libc/__write /lib64/libc-2.18.so:0x00000000000d8e40 arg1=%ax
      p:probe_libc/abs_d8e49 /lib64/libc-2.18.so:0x00000000000d8e49 arg1=%ax
    
      # cat /sys/kernel/debug/tracing/kprobe_events
    
      p:probe/abs_ffffffff8119d175 0xffffffff8119d175 arg1=%ax
      p:probe/sys_write _text+1692016 arg1=%ax
    
      # perf probe -l
    
      Failed to find debug information for address 5
        probe:abs_ffffffff8119d175 (on sys_write+5 with arg1)
        probe:sys_write      (on sys_write with arg1)
        probe_libc:__write   (on @unix/syscall-template.S:81 in /lib64/libc-2.18.so with arg1)
        probe_libc:abs_0     (on 0x0 in /lib64/libc-2.18.so with arg1)
        probe_libc:abs_5     (on 0x5 in /lib64/libc-2.18.so with arg1)
        probe_libc:abs_d8e40 (on @unix/syscall-template.S:81 in /lib64/libc-2.18.so with arg1)
        probe_libc:abs_d8e49 (on __GI___libc_write+9 in /lib64/libc-2.18.so with arg1)
    Signed-off-by: default avatarWang Nan <wangnan0@huawei.com>
    Acked-by: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1440586666-235233-7-git-send-email-wangnan0@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    da15bd9d
probe-finder.c 42.8 KB