perf trace: Add the syscall_arg_fmt pointer to syscall_arg
authorArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 4 Oct 2019 17:52:30 +0000 (14:52 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 7 Oct 2019 15:22:18 +0000 (12:22 -0300)
So that the scnprintf beautifiers can access it, as will be the case
with the char array one in the following csets, that needs to know
the number of elements in an array.

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>
Link: https://lkml.kernel.org/n/tip-01qmjqv6cb1nj1qy4khdexce@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-trace.c
tools/perf/trace/beauty/beauty.h

index 82d39ef43d9cabcf1242841edd2e6c7ef093cad9..f30296c724151d700160b79d574b4356911ffa0e 100644 (file)
 # define F_LINUX_SPECIFIC_BASE 1024
 #endif
 
+struct syscall_arg_fmt {
+       size_t     (*scnprintf)(char *bf, size_t size, struct syscall_arg *arg);
+       unsigned long (*mask_val)(struct syscall_arg *arg, unsigned long val);
+       void       *parm;
+       const char *name;
+       bool       show_zero;
+};
+
+struct syscall_fmt {
+       const char *name;
+       const char *alias;
+       struct {
+               const char *sys_enter,
+                          *sys_exit;
+       }          bpf_prog_name;
+       struct syscall_arg_fmt arg[6];
+       u8         nr_args;
+       bool       errpid;
+       bool       timeout;
+       bool       hexret;
+};
+
 struct trace {
        struct perf_tool        tool;
        struct syscalltbl       *sctbl;
@@ -695,28 +717,6 @@ static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size,
 #include "trace/beauty/socket_type.c"
 #include "trace/beauty/waitid_options.c"
 
-struct syscall_arg_fmt {
-       size_t     (*scnprintf)(char *bf, size_t size, struct syscall_arg *arg);
-       unsigned long (*mask_val)(struct syscall_arg *arg, unsigned long val);
-       void       *parm;
-       const char *name;
-       bool       show_zero;
-};
-
-struct syscall_fmt {
-       const char *name;
-       const char *alias;
-       struct {
-               const char *sys_enter,
-                          *sys_exit;
-       }          bpf_prog_name;
-       struct syscall_arg_fmt arg[6];
-       u8         nr_args;
-       bool       errpid;
-       bool       timeout;
-       bool       hexret;
-};
-
 static struct syscall_fmt syscall_fmts[] = {
        { .name     = "access",
          .arg = { [1] = { .scnprintf = SCA_ACCMODE,  /* mode */ }, }, },
@@ -1771,6 +1771,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
                        if (arg.mask & bit)
                                continue;
 
+                       arg.fmt = &sc->arg_fmt[arg.idx];
                        val = syscall_arg__val(&arg, arg.idx);
                        /*
                         * Some syscall args need some mask, most don't and
index 7e06605f7c763462b14c0e705cd7a70de0306fb9..4cc4f6b3d4a13753427d3691c18ccf09a9fdcaf0 100644 (file)
@@ -78,6 +78,8 @@ struct augmented_arg {
        u64  value[];
 };
 
+struct syscall_arg_fmt;
+
 /**
  * @val: value of syscall argument being formatted
  * @args: All the args, use syscall_args__val(arg, nth) to access one
@@ -94,6 +96,7 @@ struct augmented_arg {
 struct syscall_arg {
        unsigned long val;
        unsigned char *args;
+       struct syscall_arg_fmt *fmt;
        struct {
                struct augmented_arg *args;
                int                  size;