# 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;
 #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 */ }, }, },
                        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
 
        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
 struct syscall_arg {
        unsigned long val;
        unsigned char *args;
+       struct syscall_arg_fmt *fmt;
        struct {
                struct augmented_arg *args;
                int                  size;