• Masami Hiramatsu's avatar
    perf probe: Fix to cut off incompatible chars from group name · 35726d3a
    Masami Hiramatsu authored
    Cut off the characters which can not use for group name of uprobes
    when making it based on executable filename.
    
    For example, if the exec name is libstdc++.so, without this fix
    perf probe generates "probe_libstdc++" as the group name, but
    it is failed to set because '+' can not be used for group name.
    
    With this fix perf accepts only alphabet, number or '_' for group
    name, thus perf generates "probe_libstdc" as the group name.
    
    E.g. with this fix, you can see the event name has no "+".
      ----
      $ ./perf probe -x /usr/lib64/libstdc++.so.6 -D is_open
      p:probe_libstdc/is_open /usr/lib64/libstdc++.so.6.0.22:0x8ca80
      p:probe_libstdc/is_open_1 /usr/lib64/libstdc++.so.6.0.22:0x8ca70
      p:probe_libstdc/is_open_2 /usr/lib64/libstdc++.so.6.0.22:0x8ca60
      p:probe_libstdc/is_open_3 /usr/lib64/libstdc++.so.6.0.22:0xb0ad0
      p:probe_libstdc/is_open_4 /usr/lib64/libstdc++.so.6.0.22:0xecca9
      ----
    
    Committer note:
    
    Before this fix:
    
      # perf probe -x /usr/lib64/libstdc++.so.6 is_open
      Failed to write event: Invalid argument
        Error: Failed to add events.
      #
    
    After the fix:
    
      # perf probe -x /usr/lib64/libstdc++.so.6 is_open
      Added new events:
        probe_libstdc:is_open (on is_open in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_1 (on is_open in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_2 (on is_open in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_3 (on is_open in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_4 (on is_open in /usr/lib64/libstdc++.so.6.0.22)
    
      You can now use it in all perf tools, such as:
    
    	  perf record -e probe_libstdc:is_open_4 -aR sleep 1
    
      # perf probe -l probe_libstdc:*
        probe_libstdc:is_open (on is_open@libstdc++-v3/include/fstream in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_1 (on is_open@libstdc++-v3/include/fstream in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_2 (on is_open@libstdc++-v3/include/fstream in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_3 (on is_open@src/c++98/basic_file.cc in /usr/lib64/libstdc++.so.6.0.22)
        probe_libstdc:is_open_4 (on stdio_filebuf:5@include/ext/stdio_filebuf.h in /usr/lib64/libstdc++.so.6.0.22)
      #
    Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: default avatarJiri Olsa <jolsa@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/147464491667.29804.9553638175441827970.stgit@devboxSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    35726d3a
probe-event.c 77.2 KB