• Masami Hiramatsu's avatar
    perf probe: Filter out instances except for inlined subroutine and subprogram · da6cb952
    Masami Hiramatsu authored
    Filter out instances except for inlined_subroutine and subprogram DIE in
    die_walk_instances() and die_is_func_instance().
    
    This fixes an issue that perf probe sets some probes on calling address
    instead of a target function itself.
    
    When perf probe walks on instances of an abstruct origin (a kind of
    function prototype of inlined function), die_walk_instances() can also
    pass a GNU_call_site (a GNU extension for call site) to callback. Since
    it is not an inlined instance of target function, we have to filter out
    when searching a probe point.
    
    Without this patch, perf probe sets probes on call site address too.This
    can happen on some function which is marked "inlined", but has actual
    symbol. (I'm not sure why GCC mark it "inlined"):
    
      # perf probe -D vfs_read
      p:probe/vfs_read _text+2500017
      p:probe/vfs_read_1 _text+2499468
      p:probe/vfs_read_2 _text+2499563
      p:probe/vfs_read_3 _text+2498876
      p:probe/vfs_read_4 _text+2498512
      p:probe/vfs_read_5 _text+2498627
    
    With this patch:
    
    Slightly different results, similar tho:
    
      # perf probe -D vfs_read
      p:probe/vfs_read _text+2498512
    
    Committer testing:
    
      # uname -a
      Linux quaco 5.3.8-200.fc30.x86_64 #1 SMP Tue Oct 29 14:46:22 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
    
    Before:
    
      # perf probe -D vfs_read
      p:probe/vfs_read _text+3131557
      p:probe/vfs_read_1 _text+3130975
      p:probe/vfs_read_2 _text+3131047
      p:probe/vfs_read_3 _text+3130380
      p:probe/vfs_read_4 _text+3130000
      # uname -a
      Linux quaco 5.3.8-200.fc30.x86_64 #1 SMP Tue Oct 29 14:46:22 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
      #
    
    After:
    
      # perf probe -D vfs_read
      p:probe/vfs_read _text+3130000
      #
    
    Fixes: db0d2c64 ("perf probe: Search concrete out-of-line instances")
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: http://lore.kernel.org/lkml/157241937063.32002.11024544873990816590.stgit@devnote2Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    da6cb952
dwarf-aux.c 33.5 KB