• M
    perf probe: Allow to add events on the local functions · eb948e50
    Masami Hiramatsu 提交于
    Allow to add events on the local functions without debuginfo.
    (With the debuginfo, we can add events even on inlined functions)
    Currently, probing on local functions requires debuginfo to
    locate actual address. It is also possible without debuginfo since
    we have symbol maps.
    
    Without this change;
      ----
      # ./perf probe -a t_show
      Added new event:
        probe:t_show         (on t_show)
    
      You can now use it in all perf tools, such as:
    
              perf record -e probe:t_show -aR sleep 1
    
      # ./perf probe -x perf -a identity__map_ip
      no symbols found in /kbuild/ksrc/linux-3/tools/perf/perf, maybe install a debug package?
      Failed to load map.
        Error: Failed to add events. (-22)
      ----
    As the above results, perf probe just put one event
    on the first found symbol for kprobe event. Moreover,
    for uprobe event, perf probe failed to find local
    functions.
    
    With this change;
      ----
      # ./perf probe -a t_show
      Added new events:
        probe:t_show         (on t_show)
        probe:t_show_1       (on t_show)
        probe:t_show_2       (on t_show)
        probe:t_show_3       (on t_show)
    
      You can now use it in all perf tools, such as:
    
              perf record -e probe:t_show_3 -aR sleep 1
    
      # ./perf probe -x perf -a identity__map_ip
      Added new events:
        probe_perf:identity__map_ip (on identity__map_ip in /kbuild/ksrc/linux-3/tools/perf/perf)
        probe_perf:identity__map_ip_1 (on identity__map_ip in /kbuild/ksrc/linux-3/tools/perf/perf)
        probe_perf:identity__map_ip_2 (on identity__map_ip in /kbuild/ksrc/linux-3/tools/perf/perf)
        probe_perf:identity__map_ip_3 (on identity__map_ip in /kbuild/ksrc/linux-3/tools/perf/perf)
    
      You can now use it in all perf tools, such as:
    
              perf record -e probe_perf:identity__map_ip_3 -aR sleep 1
      ----
    Now we succeed to put events on every given local functions
    for both kprobes and uprobes. :)
    
    Note that this also introduces some symbol rbtree
    iteration macros; symbols__for_each, dso__for_each_symbol,
    and map__for_each_symbol. These are for walking through
    the symbol list in a map.
    
    Changes from v2:
      - Fix add_exec_to_probe_trace_events() not to convert address
        to tp->symbol any more.
      - Fix to set kernel probes based on ref_reloc_sym.
    Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: "David A. Long" <dave.long@linaro.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: yrl.pp-manager.tt@hitachi.com
    Link: http://lkml.kernel.org/r/20140206053225.29635.15026.stgit@kbuild-fedora.yrl.intra.hitachi.co.jpSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    eb948e50
probe-event.c 56.3 KB