• Masami Hiramatsu's avatar
    perf probe: Show correct statement line number by perf probe -l · 57f95bf5
    Masami Hiramatsu authored
    The dwarf_getsrc_die() can return the line which is not a statement nor
    the least line number among the lines which shares same address.
    
    This can lead perf probe --list shows incorrect line number for probed
    address.
    
    To fix this, this introduces cu_getsrc_die() which returns only a
    statement line and which is the least line number (we call it the
    representive line for an address), and use it in cu_find_lineinfo().
    
    Also, if the given address is the entry address of a real function,
    cu_find_lineinfo() returns the function declared line number instead of
    the start line number of the function body.
    
    For example, without this change perf probe -l shows incorrect line as
    below.
    
      # perf probe -a kernel_read:2
      Added new event:
        probe:kernel_read    (on kernel_read:2)
    
      You can now use it in all perf tools, such as:
    
      	perf record -e probe:kernel_read -aR sleep 1
    
      # perf probe -l
        probe:kernel_read    (on kernel_read:1@linux-5.0.0/fs/read_write.c)
    
    With this fix, it shows correct line number as below;
    
      # perf probe -l
        probe:kernel_read    (on kernel_read:2@linux-5.0.0/fs/read_write.c)
    Reported-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
    Link: http://lore.kernel.org/lkml/157406471067.24476.17463149618465494448.stgit@devnote2Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    57f95bf5
dwarf-aux.c 34.9 KB