• A
    perf trace: Beautify 'fspick' arguments · 693bd394
    Arnaldo Carvalho de Melo 提交于
    Use existing beautifiers for the first 2 args (dfd, path) and wire up
    the recently introduced fspick flags table generator.
    
    Now it should be possible to just use:
    
       perf trace -e fspick
    
    As root and see all move_mount syscalls with its args beautified, either
    using the vfs_getname perf probe method or using the
    augmented_raw_syscalls.c eBPF helper to get the pathnames, the other
    args should work in all cases, i.e. all that is needed can be obtained
    directly from the raw_syscalls:sys_enter tracepoint args.
    
      # cat sys_fspick.c
      #define _GNU_SOURCE        /* See feature_test_macros(7) */
      #include <unistd.h>
      #include <sys/syscall.h>   /* For SYS_xxx definitions */
      #include <fcntl.h>
    
      #define __NR_fspick 433
    
      #define FSPICK_CLOEXEC          0x00000001
      #define FSPICK_SYMLINK_NOFOLLOW 0x00000002
      #define FSPICK_NO_AUTOMOUNT     0x00000004
      #define FSPICK_EMPTY_PATH       0x00000008
    
      static inline int sys_fspick(int fd, const char *path, int flags)
      {
      	syscall(__NR_fspick, fd, path, flags);
      }
    
      int main(int argc, char *argv[])
      {
      	int flags = 0, fd = 0;
    
      	open("/foo", 0);
      	sys_fspick(fd++, "/foo1", flags);
      	flags |= FSPICK_CLOEXEC;
      	sys_fspick(fd++, "/foo2", flags);
      	flags |= FSPICK_SYMLINK_NOFOLLOW;
      	sys_fspick(fd++, "/foo3", flags);
      	flags |= FSPICK_NO_AUTOMOUNT;
      	sys_fspick(fd++, "/foo4", flags);
      	flags |= FSPICK_EMPTY_PATH;
      	return sys_fspick(fd++, "/foo5", flags);
      }
      # perf trace -e fspick ./sys_fspick
      LLVM: dumping /home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
      fspick(0, "/foo1", 0)                   = -1 ENOENT (No such file or directory)
      fspick(1, "/foo2", FSPICK_CLOEXEC)      = -1 ENOENT (No such file or directory)
      fspick(2, "/foo3", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
      fspick(3, "/foo4", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW|FSPICK_NO_AUTOMOUNT) = -1 ENOENT (No such file or directory)
      fspick(4, "/foo5", FSPICK_CLOEXEC|FSPICK_SYMLINK_NOFOLLOW|FSPICK_NO_AUTOMOUNT|FSPICK_EMPTY_PATH) = -1 ENOENT (No such file or directory)
      #
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    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-erau5xjtt8wvgnhvdbchstuk@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    693bd394
beauty.h 7.9 KB