1. 10 Jun, 2019 33 commits
  2. 05 Jun, 2019 7 commits
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Associate more argument names with the filename beautifier · dea87bfb
      Arnaldo Carvalho de Melo authored
      For instance, the rename* family uses "oldname", "newname", so check if
      "name" is at the end and treat it as a filename.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-wjy7j4bk06g7atzwoz1mid24@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      dea87bfb
    • Arnaldo Carvalho de Melo's avatar
      perf trace: Consume the augmented_raw_syscalls payload · 8195168e
      Arnaldo Carvalho de Melo authored
      To support the SCA_FILENAME beautifier in more than one syscall arg, as
      needed for syscalls such as the rename* family, we need to, after
      processing one such arg, bump the augmented pointers so that the next
      augmented arg don't reuse data for the previous augmented arguments.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-4e4cmzyjxb3wkonfo1x9a27y@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8195168e
    • Jiri Olsa's avatar
      perf jvmti: Address gcc string overflow warning for strncpy() · 279ab04d
      Jiri Olsa authored
      We are getting false positive gcc warning when we compile with gcc9 (9.1.1):
      
           CC       jvmti/libjvmti.o
         In file included from /usr/include/string.h:494,
                          from jvmti/libjvmti.c:5:
         In function ‘strncpy’,
             inlined from ‘copy_class_filename.constprop’ at jvmti/libjvmti.c:166:3:
         /usr/include/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
           106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
               |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         jvmti/libjvmti.c: In function ‘copy_class_filename.constprop’:
         jvmti/libjvmti.c:165:26: note: length computed here
           165 |   size_t file_name_len = strlen(file_name);
               |                          ^~~~~~~~~~~~~~~~~
         cc1: all warnings being treated as errors
      
      As per Arnaldo's suggestion use strlcpy(), which does the same thing and keeps
      gcc silent.
      Suggested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ben Gainey <ben.gainey@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/20190531131321.GB1281@kravaSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      279ab04d
    • Arnaldo Carvalho de Melo's avatar
      perf augmented_raw_syscalls: Move reading filename to the loop · 602bce09
      Arnaldo Carvalho de Melo authored
      Almost there, next step is to copy more than one filename payload.
      
      Probably to read syscall arg structs, etc we'll need just a variation of
      this that will decide what to use, if probe_read_str() or plain
      probe_read for structs, i.e. fixed size.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-uf6u0pld6xe4xuo16f04owlz@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      602bce09
    • Arnaldo Carvalho de Melo's avatar
      perf augmented_raw_syscalls: Change helper to consider just the augmented_filename part · deaf4da4
      Arnaldo Carvalho de Melo authored
      So that we can use it for multiple args, baby steps not to step into the
      verifier toes.
      
      In the process make sure we handle -EFAULT from bpf_prog_read_str(), as
      this really is needed now that we'll handle more than one augmented
      argument, i.e. if there is failure, then we have the argument that fails
      have:
      
        (size = 0, err = -EFAULT, value = [] )
      
      followed by the next, lets say that worked for a second pathname:
      
        (size = 4, err = 0, value = "/tmp" )
      
      So we can skip the first while telling the user about the problem and
      then process the second.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-deyvqi39um6gp6hux6jovos8@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      deaf4da4
    • Arnaldo Carvalho de Melo's avatar
      perf augmented_raw_syscalls: Move the probe_read_str to a separate function · 0c95a7ff
      Arnaldo Carvalho de Melo authored
      One more step into copying multiple filenames to support syscalls like
      rename*.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lkml.kernel.org/n/tip-xdqtjexdyp81oomm1rkzeifl@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0c95a7ff
    • Arnaldo Carvalho de Melo's avatar
      perf augmented_raw_syscalls: Tell which args are filenames and how many bytes to copy · 4cae8675
      Arnaldo Carvalho de Melo authored
      Since we know what args are strings from reading the syscall
      descriptions in tracefs and also already mark such args to be beautified
      using the syscall_arg__scnprintf_filename() helper, all we need is to
      fill in this info in the 'syscalls' BPF map we were using to state which
      syscalls the user is interested in, i.e. the syscall filter.
      
      Right now just set that with PATH_MAX and unroll the syscall arg in the
      BPF program, as the verifier isn't liking something clang generates when
      unrolling the loop.
      
      This also makes the augmented_raw_syscalls.c program support all arches,
      since we removed that set of defines with the hard coded syscall
      numbers, all should be automatically set for all arches, with the
      syscall id mapping done correcly.
      
      Doing baby steps here, i.e. just the first string arg for a syscall is
      printed, syscalls with more than one, say, the various rename* syscalls,
      need further work, but lets get first something that the BPF verifier
      accepts before increasing the complexity
      
      To test it, something like:
      
       # perf trace -e string -e /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.c
      
      With:
      
        # cat ~/.perfconfig
        [llvm]
      	dump-obj = true
      	clang-opt = -g
        [trace]
      	#add_events = /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.c
      	show_zeros = yes
      	show_duration = no
      	no_inherit = yes
      	show_timestamp = no
      	show_arg_names = no
      	args_alignment = 40
      	show_prefix = yes
        #
      
      That commented add_events line is needed for developing this
      augmented_raw_syscalls.c BPF program, as if we add it via the
      'add_events' mechanism so as to shorten the 'perf trace' command lines,
      then we end up not setting up the -v option which precludes us having
      access to the bpf verifier log :-\
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexei Starovoitov <ast@fb.com>
      Cc: Andrii Nakryiko <andriin@fb.com>
      Cc: Daniel Borkmann <daniel@iogearbox.net>
      Cc: Jesper Dangaard Brouer <brouer@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Yonghong Song <yhs@fb.com>
      Link: https://lkml.kernel.org/n/tip-dn863ya0cbsqycxuy0olvbt1@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4cae8675