perf trace: Allow asking for not suppressing common string prefixes
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 14 Dec 2018 20:06:47 +0000 (17:06 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 18 Dec 2018 19:07:42 +0000 (16:07 -0300)
So far we've been suppressing common stuff such as "MAP_" in the mmap
flags, showing "SHARED" instead of "MAP_SHARED", allow for those
prefixes (and a few suffixes) to be shown:

  # trace -e *map,open*,*seek sleep 1
  openat("/etc/ld.so.cache", CLOEXEC) = 3
  mmap(0, 109093, READ, PRIVATE, 3, 0) = 0x7ff61c695000
  openat("/lib64/libc.so.6", CLOEXEC) = 3
  lseek(3, 792, SET) = 792
  mmap(0, 8192, READ|WRITE, PRIVATE|ANONYMOUS) = 0x7ff61c693000
  lseek(3, 792, SET) = 792
  lseek(3, 864, SET) = 864
  mmap(0, 1857568, READ, PRIVATE|DENYWRITE, 3, 0) = 0x7ff61c4cd000
  mmap(0x7ff61c4ef000, 1363968, EXEC|READ, PRIVATE|FIXED|DENYWRITE, 3, 139264) = 0x7ff61c4ef000
  mmap(0x7ff61c63c000, 311296, READ, PRIVATE|FIXED|DENYWRITE, 3, 1503232) = 0x7ff61c63c000
  mmap(0x7ff61c689000, 24576, READ|WRITE, PRIVATE|FIXED|DENYWRITE, 3, 1814528) = 0x7ff61c689000
  mmap(0x7ff61c68f000, 14368, READ|WRITE, PRIVATE|FIXED|ANONYMOUS) = 0x7ff61c68f000
  munmap(0x7ff61c695000, 109093) = 0
  openat("/usr/lib/locale/locale-archive", CLOEXEC) = 3
  mmap(0, 217749968, READ, PRIVATE, 3, 0) = 0x7ff60f523000
  #
  # vim ~/.perfconfig
  #
  # perf config
  llvm.dump-obj=true
  trace.add_events=/home/acme/git/perf/tools/perf/examples/bpf/augmented_raw_syscalls.o
  trace.show_zeros=yes
  trace.show_duration=no
  trace.no_inherit=yes
  trace.show_timestamp=no
  trace.show_arg_names=no
  trace.args_alignment=0
  trace.string_quote="
  trace.show_prefix=yes
  #
  #
  # trace -e *map,open*,*seek sleep 1
  openat(AT_FDCWD, "/etc/ld.so.cache", O_CLOEXEC) = 3
  mmap(0, 109093, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7ebbe59000
  openat(AT_FDCWD, "/lib64/libc.so.6", O_CLOEXEC) = 3
  lseek(3, 792, SEEK_SET) = 792
  mmap(0, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS) = 0x7f7ebbe57000
  lseek(3, 792, SEEK_SET) = 792
  lseek(3, 864, SEEK_SET) = 864
  mmap(0, 1857568, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7ebbc91000
  mmap(0x7f7ebbcb3000, 1363968, PROT_EXEC|PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 139264) = 0x7f7ebbcb3000
  mmap(0x7f7ebbe00000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 1503232) = 0x7f7ebbe00000
  mmap(0x7f7ebbe4d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 1814528) = 0x7f7ebbe4d000
  mmap(0x7f7ebbe53000, 14368, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS) = 0x7f7ebbe53000
  munmap(0x7f7ebbe59000, 109093) = 0
  openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_CLOEXEC) = 3
  mmap(0, 217749968, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7eaece7000
  #

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Luis Cláudio Gonçalves <lclaudio@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: https://lkml.kernel.org/n/tip-mtn1i4rjowjl72trtnbmvjd4@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
28 files changed:
tools/perf/Documentation/perf-config.txt
tools/perf/builtin-trace.c
tools/perf/trace/beauty/beauty.h
tools/perf/trace/beauty/clone.c
tools/perf/trace/beauty/eventfd.c
tools/perf/trace/beauty/fcntl.c
tools/perf/trace/beauty/flock.c
tools/perf/trace/beauty/futex_op.c
tools/perf/trace/beauty/futex_val3.c
tools/perf/trace/beauty/ioctl.c
tools/perf/trace/beauty/kcmp.c
tools/perf/trace/beauty/mmap.c
tools/perf/trace/beauty/mode_t.c
tools/perf/trace/beauty/mount_flags.c
tools/perf/trace/beauty/msg_flags.c
tools/perf/trace/beauty/open_flags.c
tools/perf/trace/beauty/perf_event_open.c
tools/perf/trace/beauty/pkey_alloc.c
tools/perf/trace/beauty/prctl.c
tools/perf/trace/beauty/renameat.c
tools/perf/trace/beauty/sched_policy.c
tools/perf/trace/beauty/seccomp.c
tools/perf/trace/beauty/signum.c
tools/perf/trace/beauty/sockaddr.c
tools/perf/trace/beauty/socket.c
tools/perf/trace/beauty/socket_type.c
tools/perf/trace/beauty/statx.c
tools/perf/trace/beauty/waitid_options.c

index 0098eab..4ac7775 100644 (file)
@@ -543,6 +543,10 @@ trace.*::
        trace.show_duration::
                Show syscall duration.
 
+       trace.show_prefix::
+               If set to 'yes' will show common string prefixes in tables. The default
+               is to remove the common prefix in things like "MAP_SHARED", showing just "SHARED".
+
        trace.show_timestamp::
                Show syscall start timestamp.
 
index 02bc5da..8a176ab 100644 (file)
@@ -132,6 +132,7 @@ struct trace {
        bool                    show_duration;
        bool                    show_zeros;
        bool                    show_arg_names;
+       bool                    show_string_prefix;
        bool                    force;
        bool                    vfs_getname;
        int                     trace_pgfaults;
@@ -360,21 +361,21 @@ out_delete:
        ({ struct syscall_tp *fields = evsel->priv; \
           fields->name.pointer(&fields->name, sample); })
 
-size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, int val)
+size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, bool show_prefix, int val)
 {
        int idx = val - sa->offset;
 
        if (idx < 0 || idx >= sa->nr_entries || sa->entries[idx] == NULL)
                return scnprintf(bf, size, intfmt, val);
 
-       return scnprintf(bf, size, "%s", sa->entries[idx]);
+       return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", sa->entries[idx]);
 }
 
 static size_t __syscall_arg__scnprintf_strarray(char *bf, size_t size,
                                                const char *intfmt,
                                                struct syscall_arg *arg)
 {
-       return strarray__scnprintf(arg->parm, bf, size, intfmt, arg->val);
+       return strarray__scnprintf(arg->parm, bf, size, intfmt, arg->show_string_prefix, arg->val);
 }
 
 static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size,
@@ -408,7 +409,7 @@ size_t syscall_arg__scnprintf_strarrays(char *bf, size_t size,
                if (idx >= 0 && idx < sa->nr_entries) {
                        if (sa->entries[idx] == NULL)
                                break;
-                       return scnprintf(bf, size, "%s", sa->entries[idx]);
+                       return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? sa->prefix : "", sa->entries[idx]);
                }
        }
 
@@ -423,10 +424,10 @@ static size_t syscall_arg__scnprintf_fd_at(char *bf, size_t size,
                                           struct syscall_arg *arg)
 {
        int fd = arg->val;
-       /* char fd_at_prefix = "AT_FD"; */
+       const char *prefix = "AT_FD";
 
        if (fd == AT_FDCWD)
-               return scnprintf(bf, size, "CWD");
+               return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? prefix : "", "CWD");
 
        return syscall_arg__scnprintf_fd(bf, size, arg);
 }
@@ -527,14 +528,16 @@ static DEFINE_STRARRAY(clockid, "CLOCK_");
 static size_t syscall_arg__scnprintf_access_mode(char *bf, size_t size,
                                                 struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *suffix = "_OK";
        size_t printed = 0;
        int mode = arg->val;
 
        if (mode == F_OK) /* 0 */
-               return scnprintf(bf, size, "F");
+               return scnprintf(bf, size, "F%s", show_prefix ? suffix : "");
 #define        P_MODE(n) \
        if (mode & n##_OK) { \
-               printed += scnprintf(bf + printed, size - printed, "%s", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s", #n, show_prefix ? suffix : ""); \
                mode &= ~n##_OK; \
        }
 
@@ -559,11 +562,13 @@ static size_t syscall_arg__scnprintf_filename(char *bf, size_t size,
 static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size,
                                                struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "O_";
        int printed = 0, flags = arg->val;
 
 #define        P_FLAG(n) \
        if (flags & O_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~O_##n; \
        }
 
@@ -589,11 +594,13 @@ static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size,
 static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size,
                                                   struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "GRND_";
        int printed = 0, flags = arg->val;
 
 #define        P_FLAG(n) \
        if (flags & GRND_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~GRND_##n; \
        }
 
@@ -1577,6 +1584,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
                .mask   = 0,
                .trace  = trace,
                .thread = thread,
+               .show_string_prefix = trace->show_string_prefix,
        };
        struct thread_trace *ttrace = thread__priv(thread);
 
@@ -3563,6 +3571,8 @@ static int trace__config(const char *var, const char *value, void *arg)
                        goto out;
                }
                trace->show_zeros = new_show_zeros;
+       } else if (!strcmp(var, "trace.show_prefix")) {
+               trace->show_string_prefix = perf_config_bool(var, value);
        } else if (!strcmp(var, "trace.no_inherit")) {
                trace->opts.no_inherit = perf_config_bool(var, value);
        } else if (!strcmp(var, "trace.args_alignment")) {
index 452e9c0..ac25b64 100644 (file)
@@ -26,8 +26,8 @@ struct strarray {
        .prefix = _prefix, \
 }
 
-size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, int val);
-size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, unsigned long flags);
+size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, bool show_prefix, int val);
+size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags);
 
 struct trace;
 struct thread;
@@ -69,6 +69,7 @@ struct augmented_arg {
  * @parm: private area, may be an strarray, for instance
  * @idx: syscall arg idx (is this the first?)
  * @mask: a syscall arg may mask another arg, see syscall_arg__scnprintf_futex_op
+ * @show_string_prefix: When there is a common prefix in a string table, show it or not
  */
 
 struct syscall_arg {
@@ -83,6 +84,7 @@ struct syscall_arg {
        void          *parm;
        u8            idx;
        u8            mask;
+       bool          show_string_prefix;
 };
 
 unsigned long syscall_arg__val(struct syscall_arg *arg, u8 idx);
@@ -162,7 +164,7 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_
 size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_arg *arg);
 #define SCA_STATX_MASK syscall_arg__scnprintf_statx_mask
 
-size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size);
+size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix);
 
 void syscall_arg__set_ret_scnprintf(struct syscall_arg *arg,
                                    size_t (*ret_scnprintf)(char *bf, size_t size, struct syscall_arg *arg));
index 0104065..6eb9a66 100644 (file)
 #include <sys/types.h>
 #include <uapi/linux/sched.h>
 
-static size_t clone__scnprintf_flags(unsigned long flags, char *bf, size_t size)
+static size_t clone__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
 {
+       const char *prefix = "CLONE_";
        int printed = 0;
 
 #define        P_FLAG(n) \
        if (flags & CLONE_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~CLONE_##n; \
        }
 
@@ -70,5 +71,5 @@ size_t syscall_arg__scnprintf_clone_flags(char *bf, size_t size, struct syscall_
        if (!(flags & CLONE_SETTLS))
                arg->mask |= SCC_TLS;
 
-       return clone__scnprintf_flags(flags, bf, size);
+       return clone__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
 }
index db5b9b4..4bab106 100644 (file)
 
 static size_t syscall_arg__scnprintf_eventfd_flags(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "EFD_";
        int printed = 0, flags = arg->val;
 
        if (flags == 0)
                return scnprintf(bf, size, "NONE");
 #define        P_FLAG(n) \
        if (flags & EFD_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~EFD_##n; \
        }
 
index 15d6690..56ef83b 100644 (file)
@@ -9,27 +9,28 @@
 #include <linux/kernel.h>
 #include <uapi/linux/fcntl.h>
 
-static size_t fcntl__scnprintf_getfd(unsigned long val, char *bf, size_t size)
+static size_t fcntl__scnprintf_getfd(unsigned long val, char *bf, size_t size, bool show_prefix)
 {
-       return scnprintf(bf, size, "%s", val ? "CLOEXEC" : "0");
+       return val ? scnprintf(bf, size, "%s", "0") :
+                    scnprintf(bf, size, "%s%s", show_prefix ? "FD_" : "", "CLOEXEC");
 }
 
 static size_t syscall_arg__scnprintf_fcntl_getfd(char *bf, size_t size, struct syscall_arg *arg)
 {
-       return fcntl__scnprintf_getfd(arg->val, bf, size);
+       return fcntl__scnprintf_getfd(arg->val, bf, size, arg->show_string_prefix);
 }
 
-static size_t fcntl__scnprintf_getlease(unsigned long val, char *bf, size_t size)
+static size_t fcntl__scnprintf_getlease(unsigned long val, char *bf, size_t size, bool show_prefix)
 {
        static const char *fcntl_setlease[] = { "RDLCK", "WRLCK", "UNLCK", };
        static DEFINE_STRARRAY(fcntl_setlease, "F_");
 
-       return strarray__scnprintf(&strarray__fcntl_setlease, bf, size, "%x", val);
+       return strarray__scnprintf(&strarray__fcntl_setlease, bf, size, "%x", show_prefix, val);
 }
 
 static size_t syscall_arg__scnprintf_fcntl_getlease(char *bf, size_t size, struct syscall_arg *arg)
 {
-       return fcntl__scnprintf_getlease(arg->val, bf, size);
+       return fcntl__scnprintf_getlease(arg->val, bf, size, arg->show_string_prefix);
 }
 
 size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_arg *arg)
@@ -68,22 +69,23 @@ out:
 
 size_t syscall_arg__scnprintf_fcntl_arg(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
        int cmd = syscall_arg__val(arg, 1);
 
        if (cmd == F_DUPFD)
                return syscall_arg__scnprintf_fd(bf, size, arg);
 
        if (cmd == F_SETFD)
-               return fcntl__scnprintf_getfd(arg->val, bf, size);
+               return fcntl__scnprintf_getfd(arg->val, bf, size, show_prefix);
 
        if (cmd == F_SETFL)
-               return open__scnprintf_flags(arg->val, bf, size);
+               return open__scnprintf_flags(arg->val, bf, size, show_prefix);
 
        if (cmd == F_SETOWN)
                return syscall_arg__scnprintf_pid(bf, size, arg);
 
        if (cmd == F_SETLEASE)
-               return fcntl__scnprintf_getlease(arg->val, bf, size);
+               return fcntl__scnprintf_getlease(arg->val, bf, size, show_prefix);
        /*
         * We still don't grab the contents of pointers on entry or exit,
         * so just print them as hex numbers
index cf02ae5..c14274e 100644 (file)
 
 size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "LOCK_";
        int printed = 0, op = arg->val;
 
        if (op == 0)
                return scnprintf(bf, size, "NONE");
 #define        P_CMD(cmd) \
        if ((op & LOCK_##cmd) == LOCK_##cmd) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #cmd); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \
                op &= ~LOCK_##cmd; \
        }
 
index 1136bde..0036515 100644 (file)
@@ -19,6 +19,8 @@
 
 static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "FUTEX_";
        enum syscall_futex_args {
                SCF_UADDR   = (1 << 0),
                SCF_OP      = (1 << 1),
@@ -32,7 +34,7 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc
        size_t printed = 0;
 
        switch (cmd) {
-#define        P_FUTEX_OP(n) case FUTEX_##n: printed = scnprintf(bf, size, #n);
+#define        P_FUTEX_OP(n) case FUTEX_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n);
        P_FUTEX_OP(WAIT);           arg->mask |= SCF_VAL3|SCF_UADDR2;             break;
        P_FUTEX_OP(WAKE);           arg->mask |= SCF_VAL3|SCF_UADDR2|SCF_TIMEOUT; break;
        P_FUTEX_OP(FD);             arg->mask |= SCF_VAL3|SCF_UADDR2|SCF_TIMEOUT; break;
@@ -50,10 +52,10 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc
        }
 
        if (op & FUTEX_PRIVATE_FLAG)
-               printed += scnprintf(bf + printed, size - printed, "|PRIV");
+               printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "", "PRIVATE_FLAG");
 
        if (op & FUTEX_CLOCK_REALTIME)
-               printed += scnprintf(bf + printed, size - printed, "|CLKRT");
+               printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "", "CLOCK_REALTIME");
 
        return printed;
 }
index 138b7d5..9114f76 100644 (file)
@@ -7,10 +7,11 @@
 
 static size_t syscall_arg__scnprintf_futex_val3(char *bf, size_t size, struct syscall_arg *arg)
 {
+       const char *prefix = "FUTEX_BITSET_";
        unsigned int bitset = arg->val;
 
        if (bitset == FUTEX_BITSET_MATCH_ANY)
-               return scnprintf(bf, size, "MATCH_ANY");
+               return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? prefix : "", "MATCH_ANY");
 
        return scnprintf(bf, size, "%#xd", bitset);
 }
index ea243f6..9efeb6a 100644 (file)
@@ -112,8 +112,9 @@ static size_t ioctl__scnprintf_perf_cmd(int nr, int dir, char *bf, size_t size)
        return scnprintf(bf, size, "(%#x, %#x, %#x)", 0xAE, nr, dir);
 }
 
-static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size)
+static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size, bool show_prefix)
 {
+       const char *prefix = "_IOC_";
        int dir  = _IOC_DIR(cmd),
            type = _IOC_TYPE(cmd),
            nr   = _IOC_NR(cmd),
@@ -143,12 +144,14 @@ static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size)
        printed += scnprintf(bf + printed, size - printed, "%c", '(');
 
        if (dir == _IOC_NONE) {
-               printed += scnprintf(bf + printed, size - printed, "%s", "NONE");
+               printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? prefix : "", "NONE");
        } else {
                if (dir & _IOC_READ)
-                       printed += scnprintf(bf + printed, size - printed, "%s", "READ");
-               if (dir & _IOC_WRITE)
-                       printed += scnprintf(bf + printed, size - printed, "%s%s", dir & _IOC_READ ? "|" : "", "WRITE");
+                       printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? prefix : "", "READ");
+               if (dir & _IOC_WRITE) {
+                       printed += scnprintf(bf + printed, size - printed, "%s%s%s", dir & _IOC_READ ? "|" : "",
+                                            show_prefix ? prefix : "",  "WRITE");
+               }
        }
 
        return printed + scnprintf(bf + printed, size - printed, ", %#x, %#x, %#x)", type, nr, sz);
@@ -158,5 +161,5 @@ size_t syscall_arg__scnprintf_ioctl_cmd(char *bf, size_t size, struct syscall_ar
 {
        unsigned long cmd = arg->val;
 
-       return ioctl__scnprintf_cmd(cmd, bf, size);
+       return ioctl__scnprintf_cmd(cmd, bf, size, arg->show_string_prefix);
 }
index 56f1e50..9351f84 100644 (file)
@@ -26,10 +26,10 @@ size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg
        return pid__scnprintf_fd(arg->trace, pid, fd, bf, size);
 }
 
-static size_t kcmp__scnprintf_type(int type, char *bf, size_t size)
+static size_t kcmp__scnprintf_type(int type, char *bf, size_t size, bool show_prefix)
 {
        static DEFINE_STRARRAY(kcmp_types, "KCMP_");
-       return strarray__scnprintf(&strarray__kcmp_types, bf, size, "%d", type);
+       return strarray__scnprintf(&strarray__kcmp_types, bf, size, "%d", show_prefix, type);
 }
 
 size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_arg *arg)
@@ -39,5 +39,5 @@ size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_ar
        if (type != KCMP_FILE)
                arg->mask |= (1 << 3) | (1 << 4); /* Ignore idx1 and idx2 */
 
-       return kcmp__scnprintf_type(type, bf, size);
+       return kcmp__scnprintf_type(type, bf, size, arg->show_string_prefix);
 }
index 1a7bd71..138f36a 100644 (file)
@@ -5,13 +5,15 @@
 static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
                                               struct syscall_arg *arg)
 {
+       const char *prot_prefix = "PROT_";
        int printed = 0, prot = arg->val;
+       bool show_prefix = arg->show_string_prefix;
 
        if (prot == PROT_NONE)
-               return scnprintf(bf, size, "NONE");
+               return scnprintf(bf, size, "%sNONE", show_prefix ? prot_prefix : "");
 #define        P_MMAP_PROT(n) \
        if (prot & PROT_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prot_prefix :"", #n); \
                prot &= ~PROT_##n; \
        }
 
@@ -31,12 +33,12 @@ static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
 
 #define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot
 
-static size_t mmap__scnprintf_flags(unsigned long flags, char *bf, size_t size)
+static size_t mmap__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
 {
 #include "trace/beauty/generated/mmap_flags_array.c"
        static DEFINE_STRARRAY(mmap_flags, "MAP_");
 
-       return strarray__scnprintf_flags(&strarray__mmap_flags, bf, size, flags);
+       return strarray__scnprintf_flags(&strarray__mmap_flags, bf, size, show_prefix, flags);
 }
 
 static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
@@ -47,7 +49,7 @@ static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
        if (flags & MAP_ANONYMOUS)
                arg->mask |= (1 << 4) | (1 << 5); /* Mask 4th ('fd') and 5th ('offset') args, ignored */
 
-       return mmap__scnprintf_flags(flags, bf, size);
+       return mmap__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
 }
 
 #define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags
@@ -55,11 +57,13 @@ static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
 static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size,
                                                  struct syscall_arg *arg)
 {
+       const char *flags_prefix = "MREMAP_";
+       bool show_prefix = arg->show_string_prefix;
        int printed = 0, flags = arg->val;
 
 #define P_MREMAP_FLAG(n) \
        if (flags & MREMAP_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? flags_prefix : "", #n); \
                flags &= ~MREMAP_##n; \
        }
 
index 6879d36..29a8fad 100644 (file)
 
 static size_t syscall_arg__scnprintf_mode_t(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "S_";
        int printed = 0, mode = arg->val;
 
 #define        P_MODE(n) \
        if ((mode & S_##n) == S_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                mode &= ~S_##n; \
        }
 
index 7129106..10fb14c 100644 (file)
 #include <linux/log2.h>
 #include <sys/mount.h>
 
-static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size)
+static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
 {
 #include "trace/beauty/generated/mount_flags_array.c"
        static DEFINE_STRARRAY(mount_flags, "MS_");
 
-       return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, flags);
+       return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, show_prefix, flags);
 }
 
 unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg __maybe_unused, unsigned long flags)
@@ -39,5 +39,5 @@ size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_
 {
        unsigned long flags = arg->val;
 
-       return mount__scnprintf_flags(flags, bf, size);
+       return mount__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
 }
index 1b9d630..d66c663 100644 (file)
 static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size,
                                               struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "MSG_";
        int printed = 0, flags = arg->val;
 
        if (flags == 0)
                return scnprintf(bf, size, "NONE");
 #define        P_MSG_FLAG(n) \
        if (flags & MSG_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~MSG_##n; \
        }
 
index cc673fe..6da4889 100644 (file)
 #undef O_LARGEFILE
 #define O_LARGEFILE    00100000
 
-size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size)
+size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
 {
+       const char *prefix = "O_";
        int printed = 0;
 
        if (flags == 0)
-               return scnprintf(bf, size, "RDONLY");
+               return scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", "RDONLY");
 #define        P_FLAG(n) \
        if (flags & O_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~O_##n; \
        }
 
@@ -57,7 +58,7 @@ size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size)
 #endif
 #ifdef O_DSYNC
        if ((flags & O_SYNC) == O_SYNC)
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", "SYNC");
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", "SYNC");
        else {
                P_FLAG(DSYNC);
        }
@@ -81,5 +82,5 @@ size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, struct syscall_a
        if (!(flags & O_CREAT))
                arg->mask |= 1 << (arg->idx + 1); /* Mask the mode parm */
 
-       return open__scnprintf_flags(flags, bf, size);
+       return open__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
 }
index 981185c..11d47db 100644 (file)
@@ -18,6 +18,8 @@
 static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size,
                                                struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "PERF_";
        int printed = 0, flags = arg->val;
 
        if (flags == 0)
@@ -25,7 +27,7 @@ static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size,
 
 #define        P_FLAG(n) \
        if (flags & PERF_FLAG_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~PERF_FLAG_##n; \
        }
 
index f4818e0..f9596ed 100644 (file)
@@ -9,14 +9,14 @@
 #include <linux/kernel.h>
 #include <linux/log2.h>
 
-size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, unsigned long flags)
+size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags)
 {
        int i, printed = 0;
 
        if (flags == 0) {
                const char *s = sa->entries[0];
                if (s)
-                       return scnprintf(bf, size, "%s", s);
+                       return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", s);
                return scnprintf(bf, size, "%d", 0);
        }
 
@@ -30,7 +30,7 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, uns
                        printed += scnprintf(bf + printed, size - printed, "|");
 
                if (sa->entries[i] != NULL)
-                       printed += scnprintf(bf + printed, size - printed, "%s", sa->entries[i]);
+                       printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? sa->prefix : "", sa->entries[i]);
                else
                        printed += scnprintf(bf + printed, size - printed, "0x%#", bit);
        }
@@ -38,17 +38,17 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, uns
        return printed;
 }
 
-static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size)
+static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size, bool show_prefix)
 {
 #include "trace/beauty/generated/pkey_alloc_access_rights_array.c"
        static DEFINE_STRARRAY(pkey_alloc_access_rights, "PKEY_");
 
-       return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, access_rights);
+       return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, show_prefix, access_rights);
 }
 
 size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg)
 {
        unsigned long cmd = arg->val;
 
-       return pkey_alloc__scnprintf_access_rights(cmd, bf, size);
+       return pkey_alloc__scnprintf_access_rights(cmd, bf, size, arg->show_string_prefix);
 }
index 7b6466b..ba2179a 100644 (file)
 
 #include "trace/beauty/generated/prctl_option_array.c"
 
-static size_t prctl__scnprintf_option(int option, char *bf, size_t size)
+static size_t prctl__scnprintf_option(int option, char *bf, size_t size, bool show_prefix)
 {
        static DEFINE_STRARRAY(prctl_options, "PR_");
-       return strarray__scnprintf(&strarray__prctl_options, bf, size, "%d", option);
+       return strarray__scnprintf(&strarray__prctl_options, bf, size, "%d", show_prefix, option);
 }
 
-static size_t prctl__scnprintf_set_mm(int option, char *bf, size_t size)
+static size_t prctl__scnprintf_set_mm(int option, char *bf, size_t size, bool show_prefix)
 {
        static DEFINE_STRARRAY(prctl_set_mm_options, "PR_SET_MM_");
-       return strarray__scnprintf(&strarray__prctl_set_mm_options, bf, size, "%d", option);
+       return strarray__scnprintf(&strarray__prctl_set_mm_options, bf, size, "%d", show_prefix, option);
 }
 
 size_t syscall_arg__scnprintf_prctl_arg2(char *bf, size_t size, struct syscall_arg *arg)
@@ -28,7 +28,7 @@ size_t syscall_arg__scnprintf_prctl_arg2(char *bf, size_t size, struct syscall_a
        int option = syscall_arg__val(arg, 0);
 
        if (option == PR_SET_MM)
-               return prctl__scnprintf_set_mm(arg->val, bf, size);
+               return prctl__scnprintf_set_mm(arg->val, bf, size, arg->show_string_prefix);
        /*
         * We still don't grab the contents of pointers on entry or exit,
         * so just print them as hex numbers
@@ -77,5 +77,5 @@ size_t syscall_arg__scnprintf_prctl_option(char *bf, size_t size, struct syscall
        if (option < ARRAY_SIZE(masks))
                arg->mask |= masks[option];
 
-       return prctl__scnprintf_option(option, bf, size);
+       return prctl__scnprintf_option(option, bf, size, arg->show_string_prefix);
 }
index 910695a..6dab340 100644 (file)
@@ -4,16 +4,16 @@
 #include "trace/beauty/beauty.h"
 #include <uapi/linux/fs.h>
 
-static size_t renameat2__scnprintf_flags(unsigned long flags, char *bf, size_t size)
+static size_t renameat2__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
 {
 #include "trace/beauty/generated/rename_flags_array.c"
        static DEFINE_STRARRAY(rename_flags, "RENAME_");
 
-       return strarray__scnprintf_flags(&strarray__rename_flags, bf, size, flags);
+       return strarray__scnprintf_flags(&strarray__rename_flags, bf, size, show_prefix, flags);
 }
 
 size_t syscall_arg__scnprintf_renameat2_flags(char *bf, size_t size, struct syscall_arg *arg)
 {
        unsigned long flags = arg->val;
-       return renameat2__scnprintf_flags(flags, bf, size);
+       return renameat2__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
 }
index 48f2b5c..68aa59e 100644 (file)
@@ -17,6 +17,8 @@
 static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size,
                                                  struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "SCHED_";
        const char *policies[] = {
                "NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE",
        };
@@ -26,13 +28,13 @@ static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size,
 
        policy &= SCHED_POLICY_MASK;
        if (policy <= SCHED_DEADLINE)
-               printed = scnprintf(bf, size, "%s", policies[policy]);
+               printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", policies[policy]);
        else
                printed = scnprintf(bf, size, "%#x", policy);
 
 #define        P_POLICY_FLAG(n) \
        if (flags & SCHED_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "|%s", #n); \
+               printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "",  #n); \
                flags &= ~SCHED_##n; \
        }
 
index e36156b..4600c28 100644 (file)
@@ -8,11 +8,13 @@
 
 static size_t syscall_arg__scnprintf_seccomp_op(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "SECOMP_SET_MODE_";
        int op = arg->val;
        size_t printed = 0;
 
        switch (op) {
-#define        P_SECCOMP_SET_MODE_OP(n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, #n); break
+#define        P_SECCOMP_SET_MODE_OP(n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); break
        P_SECCOMP_SET_MODE_OP(STRICT);
        P_SECCOMP_SET_MODE_OP(FILTER);
 #undef P_SECCOMP_SET_MODE_OP
@@ -31,11 +33,13 @@ static size_t syscall_arg__scnprintf_seccomp_op(char *bf, size_t size, struct sy
 static size_t syscall_arg__scnprintf_seccomp_flags(char *bf, size_t size,
                                                   struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "SECOMP_FILTER_FLAG_";
        int printed = 0, flags = arg->val;
 
 #define        P_FLAG(n) \
        if (flags & SECCOMP_FILTER_FLAG_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~SECCOMP_FILTER_FLAG_##n; \
        }
 
index 587fec5..21220c5 100644 (file)
@@ -3,10 +3,12 @@
 
 static size_t syscall_arg__scnprintf_signum(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "SIG";
        int sig = arg->val;
 
        switch (sig) {
-#define        P_SIGNUM(n) case SIG##n: return scnprintf(bf, size, #n)
+#define        P_SIGNUM(n) case SIG##n: return scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n)
        P_SIGNUM(HUP);
        P_SIGNUM(INT);
        P_SIGNUM(QUIT);
index 95cc82a..173c8f7 100644 (file)
@@ -58,7 +58,7 @@ static size_t syscall_arg__scnprintf_augmented_sockaddr(struct syscall_arg *arg,
        char family[32];
        size_t printed;
 
-       strarray__scnprintf(&strarray__socket_families, family, sizeof(family), "%d", sa->sa_family);
+       strarray__scnprintf(&strarray__socket_families, family, sizeof(family), "%d", arg->show_string_prefix, sa->sa_family);
        printed = scnprintf(bf, size, "{ .family: %s", family);
 
        if (sa->sa_family < ARRAY_SIZE(af_scnprintfs) && af_scnprintfs[sa->sa_family])
index eacbfb9..f23a3dd 100644 (file)
@@ -9,12 +9,12 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 
-static size_t socket__scnprintf_ipproto(int protocol, char *bf, size_t size)
+static size_t socket__scnprintf_ipproto(int protocol, char *bf, size_t size, bool show_prefix)
 {
 #include "trace/beauty/generated/socket_ipproto_array.c"
        static DEFINE_STRARRAY(socket_ipproto, "IPPROTO_");
 
-       return strarray__scnprintf(&strarray__socket_ipproto, bf, size, "%d", protocol);
+       return strarray__scnprintf(&strarray__socket_ipproto, bf, size, "%d", show_prefix, protocol);
 }
 
 size_t syscall_arg__scnprintf_socket_protocol(char *bf, size_t size, struct syscall_arg *arg)
@@ -22,7 +22,7 @@ size_t syscall_arg__scnprintf_socket_protocol(char *bf, size_t size, struct sysc
        int domain = syscall_arg__val(arg, 0);
 
        if (domain == AF_INET || domain == AF_INET6)
-               return socket__scnprintf_ipproto(arg->val, bf, size);
+               return socket__scnprintf_ipproto(arg->val, bf, size, arg->show_string_prefix);
 
        return syscall_arg__scnprintf_int(bf, size, arg);
 }
index a63a9a3..bed8d57 100644 (file)
@@ -20,6 +20,8 @@
 
 static size_t syscall_arg__scnprintf_socket_type(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "SOCK_";
        size_t printed;
        int type = arg->val,
            flags = type & ~SOCK_TYPE_MASK;
@@ -29,7 +31,7 @@ static size_t syscall_arg__scnprintf_socket_type(char *bf, size_t size, struct s
         * Can't use a strarray, MIPS may override for ABI reasons.
         */
        switch (type) {
-#define        P_SK_TYPE(n) case SOCK_##n: printed = scnprintf(bf, size, #n); break;
+#define        P_SK_TYPE(n) case SOCK_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); break;
        P_SK_TYPE(STREAM);
        P_SK_TYPE(DGRAM);
        P_SK_TYPE(RAW);
index 630f276..811cc0e 100644 (file)
 
 size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "AT_";
        int printed = 0, flags = arg->val;
 
        if (flags == 0)
-               return scnprintf(bf, size, "SYNC_AS_STAT");
+               return scnprintf(bf, size, "%s%s", show_prefix ? "AT_STATX_" : "", "SYNC_AS_STAT");
 #define        P_FLAG(n) \
        if (flags & AT_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~AT_##n; \
        }
 
@@ -41,11 +43,13 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_
 
 size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "STATX_";
        int printed = 0, flags = arg->val;
 
 #define        P_FLAG(n) \
        if (flags & STATX_##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
                flags &= ~STATX_##n; \
        }
 
index 42ff58a..6897fab 100644 (file)
@@ -5,11 +5,13 @@
 static size_t syscall_arg__scnprintf_waitid_options(char *bf, size_t size,
                                                    struct syscall_arg *arg)
 {
+       bool show_prefix = arg->show_string_prefix;
+       const char *prefix = "W";
        int printed = 0, options = arg->val;
 
 #define        P_OPTION(n) \
        if (options & W##n) { \
-               printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
+               printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : #n); \
                options &= ~W##n; \
        }