perf trace: Allow asking for not suppressing common string prefixes

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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 2e3d7fac
...@@ -543,6 +543,10 @@ trace.*:: ...@@ -543,6 +543,10 @@ trace.*::
trace.show_duration:: trace.show_duration::
Show syscall 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:: trace.show_timestamp::
Show syscall start timestamp. Show syscall start timestamp.
......
...@@ -132,6 +132,7 @@ struct trace { ...@@ -132,6 +132,7 @@ struct trace {
bool show_duration; bool show_duration;
bool show_zeros; bool show_zeros;
bool show_arg_names; bool show_arg_names;
bool show_string_prefix;
bool force; bool force;
bool vfs_getname; bool vfs_getname;
int trace_pgfaults; int trace_pgfaults;
...@@ -360,21 +361,21 @@ static struct perf_evsel *perf_evsel__raw_syscall_newtp(const char *direction, v ...@@ -360,21 +361,21 @@ static struct perf_evsel *perf_evsel__raw_syscall_newtp(const char *direction, v
({ struct syscall_tp *fields = evsel->priv; \ ({ struct syscall_tp *fields = evsel->priv; \
fields->name.pointer(&fields->name, sample); }) 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; int idx = val - sa->offset;
if (idx < 0 || idx >= sa->nr_entries || sa->entries[idx] == NULL) if (idx < 0 || idx >= sa->nr_entries || sa->entries[idx] == NULL)
return scnprintf(bf, size, intfmt, val); 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, static size_t __syscall_arg__scnprintf_strarray(char *bf, size_t size,
const char *intfmt, const char *intfmt,
struct syscall_arg *arg) 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, 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, ...@@ -408,7 +409,7 @@ size_t syscall_arg__scnprintf_strarrays(char *bf, size_t size,
if (idx >= 0 && idx < sa->nr_entries) { if (idx >= 0 && idx < sa->nr_entries) {
if (sa->entries[idx] == NULL) if (sa->entries[idx] == NULL)
break; 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, ...@@ -423,10 +424,10 @@ static size_t syscall_arg__scnprintf_fd_at(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
int fd = arg->val; int fd = arg->val;
/* char fd_at_prefix = "AT_FD"; */ const char *prefix = "AT_FD";
if (fd == AT_FDCWD) 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); return syscall_arg__scnprintf_fd(bf, size, arg);
} }
...@@ -527,14 +528,16 @@ static DEFINE_STRARRAY(clockid, "CLOCK_"); ...@@ -527,14 +528,16 @@ static DEFINE_STRARRAY(clockid, "CLOCK_");
static size_t syscall_arg__scnprintf_access_mode(char *bf, size_t size, static size_t syscall_arg__scnprintf_access_mode(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *suffix = "_OK";
size_t printed = 0; size_t printed = 0;
int mode = arg->val; int mode = arg->val;
if (mode == F_OK) /* 0 */ if (mode == F_OK) /* 0 */
return scnprintf(bf, size, "F"); return scnprintf(bf, size, "F%s", show_prefix ? suffix : "");
#define P_MODE(n) \ #define P_MODE(n) \
if (mode & n##_OK) { \ 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; \ mode &= ~n##_OK; \
} }
...@@ -559,11 +562,13 @@ static size_t syscall_arg__scnprintf_filename(char *bf, size_t size, ...@@ -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, static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "O_";
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & O_##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; \ flags &= ~O_##n; \
} }
...@@ -589,11 +594,13 @@ static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size, ...@@ -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, static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "GRND_";
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & GRND_##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; \ flags &= ~GRND_##n; \
} }
...@@ -1577,6 +1584,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size, ...@@ -1577,6 +1584,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
.mask = 0, .mask = 0,
.trace = trace, .trace = trace,
.thread = thread, .thread = thread,
.show_string_prefix = trace->show_string_prefix,
}; };
struct thread_trace *ttrace = thread__priv(thread); struct thread_trace *ttrace = thread__priv(thread);
...@@ -3563,6 +3571,8 @@ static int trace__config(const char *var, const char *value, void *arg) ...@@ -3563,6 +3571,8 @@ static int trace__config(const char *var, const char *value, void *arg)
goto out; goto out;
} }
trace->show_zeros = new_show_zeros; 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")) { } else if (!strcmp(var, "trace.no_inherit")) {
trace->opts.no_inherit = perf_config_bool(var, value); trace->opts.no_inherit = perf_config_bool(var, value);
} else if (!strcmp(var, "trace.args_alignment")) { } else if (!strcmp(var, "trace.args_alignment")) {
......
...@@ -26,8 +26,8 @@ struct strarray { ...@@ -26,8 +26,8 @@ struct strarray {
.prefix = _prefix, \ .prefix = _prefix, \
} }
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);
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);
struct trace; struct trace;
struct thread; struct thread;
...@@ -69,6 +69,7 @@ struct augmented_arg { ...@@ -69,6 +69,7 @@ struct augmented_arg {
* @parm: private area, may be an strarray, for instance * @parm: private area, may be an strarray, for instance
* @idx: syscall arg idx (is this the first?) * @idx: syscall arg idx (is this the first?)
* @mask: a syscall arg may mask another arg, see syscall_arg__scnprintf_futex_op * @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 { struct syscall_arg {
...@@ -83,6 +84,7 @@ struct syscall_arg { ...@@ -83,6 +84,7 @@ struct syscall_arg {
void *parm; void *parm;
u8 idx; u8 idx;
u8 mask; u8 mask;
bool show_string_prefix;
}; };
unsigned long syscall_arg__val(struct syscall_arg *arg, u8 idx); 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_ ...@@ -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); 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 #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, void syscall_arg__set_ret_scnprintf(struct syscall_arg *arg,
size_t (*ret_scnprintf)(char *bf, size_t size, struct syscall_arg *arg)); size_t (*ret_scnprintf)(char *bf, size_t size, struct syscall_arg *arg));
......
...@@ -10,13 +10,14 @@ ...@@ -10,13 +10,14 @@
#include <sys/types.h> #include <sys/types.h>
#include <uapi/linux/sched.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; int printed = 0;
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & CLONE_##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; \ flags &= ~CLONE_##n; \
} }
...@@ -70,5 +71,5 @@ size_t syscall_arg__scnprintf_clone_flags(char *bf, size_t size, struct syscall_ ...@@ -70,5 +71,5 @@ size_t syscall_arg__scnprintf_clone_flags(char *bf, size_t size, struct syscall_
if (!(flags & CLONE_SETTLS)) if (!(flags & CLONE_SETTLS))
arg->mask |= SCC_TLS; arg->mask |= SCC_TLS;
return clone__scnprintf_flags(flags, bf, size); return clone__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
} }
...@@ -13,13 +13,15 @@ ...@@ -13,13 +13,15 @@
static size_t syscall_arg__scnprintf_eventfd_flags(char *bf, size_t size, struct syscall_arg *arg) 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; int printed = 0, flags = arg->val;
if (flags == 0) if (flags == 0)
return scnprintf(bf, size, "NONE"); return scnprintf(bf, size, "NONE");
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & EFD_##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; \ flags &= ~EFD_##n; \
} }
......
...@@ -9,27 +9,28 @@ ...@@ -9,27 +9,28 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <uapi/linux/fcntl.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) 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 const char *fcntl_setlease[] = { "RDLCK", "WRLCK", "UNLCK", };
static DEFINE_STRARRAY(fcntl_setlease, "F_"); 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) 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) size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_arg *arg)
...@@ -68,22 +69,23 @@ size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_ar ...@@ -68,22 +69,23 @@ size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_ar
size_t syscall_arg__scnprintf_fcntl_arg(char *bf, size_t size, struct syscall_arg *arg) 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); int cmd = syscall_arg__val(arg, 1);
if (cmd == F_DUPFD) if (cmd == F_DUPFD)
return syscall_arg__scnprintf_fd(bf, size, arg); return syscall_arg__scnprintf_fd(bf, size, arg);
if (cmd == F_SETFD) 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) 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) if (cmd == F_SETOWN)
return syscall_arg__scnprintf_pid(bf, size, arg); return syscall_arg__scnprintf_pid(bf, size, arg);
if (cmd == F_SETLEASE) 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, * We still don't grab the contents of pointers on entry or exit,
* so just print them as hex numbers * so just print them as hex numbers
......
...@@ -22,13 +22,15 @@ ...@@ -22,13 +22,15 @@
size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg) 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; int printed = 0, op = arg->val;
if (op == 0) if (op == 0)
return scnprintf(bf, size, "NONE"); return scnprintf(bf, size, "NONE");
#define P_CMD(cmd) \ #define P_CMD(cmd) \
if ((op & LOCK_##cmd) == LOCK_##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; \ op &= ~LOCK_##cmd; \
} }
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct syscall_arg *arg) 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 { enum syscall_futex_args {
SCF_UADDR = (1 << 0), SCF_UADDR = (1 << 0),
SCF_OP = (1 << 1), SCF_OP = (1 << 1),
...@@ -32,7 +34,7 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc ...@@ -32,7 +34,7 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc
size_t printed = 0; size_t printed = 0;
switch (cmd) { 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(WAIT); arg->mask |= SCF_VAL3|SCF_UADDR2; break;
P_FUTEX_OP(WAKE); arg->mask |= SCF_VAL3|SCF_UADDR2|SCF_TIMEOUT; 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; 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 ...@@ -50,10 +52,10 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct sysc
} }
if (op & FUTEX_PRIVATE_FLAG) 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) 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; return printed;
} }
......
...@@ -7,10 +7,11 @@ ...@@ -7,10 +7,11 @@
static size_t syscall_arg__scnprintf_futex_val3(char *bf, size_t size, struct syscall_arg *arg) 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; unsigned int bitset = arg->val;
if (bitset == FUTEX_BITSET_MATCH_ANY) 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); return scnprintf(bf, size, "%#xd", bitset);
} }
......
...@@ -112,8 +112,9 @@ static size_t ioctl__scnprintf_perf_cmd(int nr, int dir, char *bf, size_t size) ...@@ -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); 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), int dir = _IOC_DIR(cmd),
type = _IOC_TYPE(cmd), type = _IOC_TYPE(cmd),
nr = _IOC_NR(cmd), nr = _IOC_NR(cmd),
...@@ -143,12 +144,14 @@ static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size) ...@@ -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", '('); printed += scnprintf(bf + printed, size - printed, "%c", '(');
if (dir == _IOC_NONE) { 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 { } else {
if (dir & _IOC_READ) if (dir & _IOC_READ)
printed += scnprintf(bf + printed, size - printed, "%s", "READ"); printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? prefix : "", "READ");
if (dir & _IOC_WRITE) if (dir & _IOC_WRITE) {
printed += scnprintf(bf + printed, size - printed, "%s%s", dir & _IOC_READ ? "|" : "", "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); 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 ...@@ -158,5 +161,5 @@ size_t syscall_arg__scnprintf_ioctl_cmd(char *bf, size_t size, struct syscall_ar
{ {
unsigned long cmd = arg->val; unsigned long cmd = arg->val;
return ioctl__scnprintf_cmd(cmd, bf, size); return ioctl__scnprintf_cmd(cmd, bf, size, arg->show_string_prefix);
} }
...@@ -26,10 +26,10 @@ size_t syscall_arg__scnprintf_kcmp_idx(char *bf, size_t size, struct syscall_arg ...@@ -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); 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_"); 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) 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 ...@@ -39,5 +39,5 @@ size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_ar
if (type != KCMP_FILE) if (type != KCMP_FILE)
arg->mask |= (1 << 3) | (1 << 4); /* Ignore idx1 and idx2 */ 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);
} }
...@@ -5,13 +5,15 @@ ...@@ -5,13 +5,15 @@
static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
const char *prot_prefix = "PROT_";
int printed = 0, prot = arg->val; int printed = 0, prot = arg->val;
bool show_prefix = arg->show_string_prefix;
if (prot == PROT_NONE) if (prot == PROT_NONE)
return scnprintf(bf, size, "NONE"); return scnprintf(bf, size, "%sNONE", show_prefix ? prot_prefix : "");
#define P_MMAP_PROT(n) \ #define P_MMAP_PROT(n) \
if (prot & 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; \ prot &= ~PROT_##n; \
} }
...@@ -31,12 +33,12 @@ static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, ...@@ -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 #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" #include "trace/beauty/generated/mmap_flags_array.c"
static DEFINE_STRARRAY(mmap_flags, "MAP_"); 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, 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, ...@@ -47,7 +49,7 @@ static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
if (flags & MAP_ANONYMOUS) if (flags & MAP_ANONYMOUS)
arg->mask |= (1 << 4) | (1 << 5); /* Mask 4th ('fd') and 5th ('offset') args, ignored */ 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 #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, ...@@ -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, static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
const char *flags_prefix = "MREMAP_";
bool show_prefix = arg->show_string_prefix;
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
#define P_MREMAP_FLAG(n) \ #define P_MREMAP_FLAG(n) \
if (flags & MREMAP_##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; \ flags &= ~MREMAP_##n; \
} }
......
...@@ -22,11 +22,13 @@ ...@@ -22,11 +22,13 @@
static size_t syscall_arg__scnprintf_mode_t(char *bf, size_t size, struct syscall_arg *arg) 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; int printed = 0, mode = arg->val;
#define P_MODE(n) \ #define P_MODE(n) \
if ((mode & S_##n) == S_##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; \ mode &= ~S_##n; \
} }
......
...@@ -11,12 +11,12 @@ ...@@ -11,12 +11,12 @@
#include <linux/log2.h> #include <linux/log2.h>
#include <sys/mount.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" #include "trace/beauty/generated/mount_flags_array.c"
static DEFINE_STRARRAY(mount_flags, "MS_"); 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) 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_ ...@@ -39,5 +39,5 @@ size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_
{ {
unsigned long flags = arg->val; unsigned long flags = arg->val;
return mount__scnprintf_flags(flags, bf, size); return mount__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
} }
...@@ -21,13 +21,15 @@ ...@@ -21,13 +21,15 @@
static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size, static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "MSG_";
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
if (flags == 0) if (flags == 0)
return scnprintf(bf, size, "NONE"); return scnprintf(bf, size, "NONE");
#define P_MSG_FLAG(n) \ #define P_MSG_FLAG(n) \
if (flags & MSG_##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; \ flags &= ~MSG_##n; \
} }
......
...@@ -22,15 +22,16 @@ ...@@ -22,15 +22,16 @@
#undef O_LARGEFILE #undef O_LARGEFILE
#define O_LARGEFILE 00100000 #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; int printed = 0;
if (flags == 0) if (flags == 0)
return scnprintf(bf, size, "RDONLY"); return scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", "RDONLY");
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & O_##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; \ flags &= ~O_##n; \
} }
...@@ -57,7 +58,7 @@ size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size) ...@@ -57,7 +58,7 @@ size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size)
#endif #endif
#ifdef O_DSYNC #ifdef O_DSYNC
if ((flags & O_SYNC) == O_SYNC) 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 { else {
P_FLAG(DSYNC); P_FLAG(DSYNC);
} }
...@@ -81,5 +82,5 @@ size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, struct syscall_a ...@@ -81,5 +82,5 @@ size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, struct syscall_a
if (!(flags & O_CREAT)) if (!(flags & O_CREAT))
arg->mask |= 1 << (arg->idx + 1); /* Mask the mode parm */ 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);
} }
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size, static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "PERF_";
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
if (flags == 0) if (flags == 0)
...@@ -25,7 +27,7 @@ static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size, ...@@ -25,7 +27,7 @@ static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size,
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & PERF_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; \ flags &= ~PERF_FLAG_##n; \
} }
......
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/log2.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; int i, printed = 0;
if (flags == 0) { if (flags == 0) {
const char *s = sa->entries[0]; const char *s = sa->entries[0];
if (s) 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); return scnprintf(bf, size, "%d", 0);
} }
...@@ -30,7 +30,7 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, uns ...@@ -30,7 +30,7 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, uns
printed += scnprintf(bf + printed, size - printed, "|"); printed += scnprintf(bf + printed, size - printed, "|");
if (sa->entries[i] != NULL) 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 else
printed += scnprintf(bf + printed, size - printed, "0x%#", bit); 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 ...@@ -38,17 +38,17 @@ size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, uns
return printed; 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" #include "trace/beauty/generated/pkey_alloc_access_rights_array.c"
static DEFINE_STRARRAY(pkey_alloc_access_rights, "PKEY_"); 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) size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg)
{ {
unsigned long cmd = arg->val; 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);
} }
...@@ -11,16 +11,16 @@ ...@@ -11,16 +11,16 @@
#include "trace/beauty/generated/prctl_option_array.c" #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_"); 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_"); 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) 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 ...@@ -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); int option = syscall_arg__val(arg, 0);
if (option == PR_SET_MM) 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, * We still don't grab the contents of pointers on entry or exit,
* so just print them as hex numbers * 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 ...@@ -77,5 +77,5 @@ size_t syscall_arg__scnprintf_prctl_option(char *bf, size_t size, struct syscall
if (option < ARRAY_SIZE(masks)) if (option < ARRAY_SIZE(masks))
arg->mask |= masks[option]; arg->mask |= masks[option];
return prctl__scnprintf_option(option, bf, size); return prctl__scnprintf_option(option, bf, size, arg->show_string_prefix);
} }
...@@ -4,16 +4,16 @@ ...@@ -4,16 +4,16 @@
#include "trace/beauty/beauty.h" #include "trace/beauty/beauty.h"
#include <uapi/linux/fs.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" #include "trace/beauty/generated/rename_flags_array.c"
static DEFINE_STRARRAY(rename_flags, "RENAME_"); 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) size_t syscall_arg__scnprintf_renameat2_flags(char *bf, size_t size, struct syscall_arg *arg)
{ {
unsigned long flags = arg->val; unsigned long flags = arg->val;
return renameat2__scnprintf_flags(flags, bf, size); return renameat2__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
} }
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size, static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "SCHED_";
const char *policies[] = { const char *policies[] = {
"NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE", "NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE",
}; };
...@@ -26,13 +28,13 @@ static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size, ...@@ -26,13 +28,13 @@ static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size,
policy &= SCHED_POLICY_MASK; policy &= SCHED_POLICY_MASK;
if (policy <= SCHED_DEADLINE) if (policy <= SCHED_DEADLINE)
printed = scnprintf(bf, size, "%s", policies[policy]); printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", policies[policy]);
else else
printed = scnprintf(bf, size, "%#x", policy); printed = scnprintf(bf, size, "%#x", policy);
#define P_POLICY_FLAG(n) \ #define P_POLICY_FLAG(n) \
if (flags & SCHED_##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; \ flags &= ~SCHED_##n; \
} }
......
...@@ -8,11 +8,13 @@ ...@@ -8,11 +8,13 @@
static size_t syscall_arg__scnprintf_seccomp_op(char *bf, size_t size, struct syscall_arg *arg) 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; int op = arg->val;
size_t printed = 0; size_t printed = 0;
switch (op) { 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(STRICT);
P_SECCOMP_SET_MODE_OP(FILTER); P_SECCOMP_SET_MODE_OP(FILTER);
#undef P_SECCOMP_SET_MODE_OP #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 ...@@ -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, static size_t syscall_arg__scnprintf_seccomp_flags(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "SECOMP_FILTER_FLAG_";
int printed = 0, flags = arg->val; int printed = 0, flags = arg->val;
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & SECCOMP_FILTER_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; \ flags &= ~SECCOMP_FILTER_FLAG_##n; \
} }
......
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
static size_t syscall_arg__scnprintf_signum(char *bf, size_t size, struct syscall_arg *arg) 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; int sig = arg->val;
switch (sig) { 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(HUP);
P_SIGNUM(INT); P_SIGNUM(INT);
P_SIGNUM(QUIT); P_SIGNUM(QUIT);
......
...@@ -58,7 +58,7 @@ static size_t syscall_arg__scnprintf_augmented_sockaddr(struct syscall_arg *arg, ...@@ -58,7 +58,7 @@ static size_t syscall_arg__scnprintf_augmented_sockaddr(struct syscall_arg *arg,
char family[32]; char family[32];
size_t printed; 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); printed = scnprintf(bf, size, "{ .family: %s", family);
if (sa->sa_family < ARRAY_SIZE(af_scnprintfs) && af_scnprintfs[sa->sa_family]) if (sa->sa_family < ARRAY_SIZE(af_scnprintfs) && af_scnprintfs[sa->sa_family])
......
...@@ -9,12 +9,12 @@ ...@@ -9,12 +9,12 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.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" #include "trace/beauty/generated/socket_ipproto_array.c"
static DEFINE_STRARRAY(socket_ipproto, "IPPROTO_"); 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) 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 ...@@ -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); int domain = syscall_arg__val(arg, 0);
if (domain == AF_INET || domain == AF_INET6) 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); return syscall_arg__scnprintf_int(bf, size, arg);
} }
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
static size_t syscall_arg__scnprintf_socket_type(char *bf, size_t size, struct syscall_arg *arg) 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; size_t printed;
int type = arg->val, int type = arg->val,
flags = type & ~SOCK_TYPE_MASK; flags = type & ~SOCK_TYPE_MASK;
...@@ -29,7 +31,7 @@ static size_t syscall_arg__scnprintf_socket_type(char *bf, size_t size, struct s ...@@ -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. * Can't use a strarray, MIPS may override for ABI reasons.
*/ */
switch (type) { 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(STREAM);
P_SK_TYPE(DGRAM); P_SK_TYPE(DGRAM);
P_SK_TYPE(RAW); P_SK_TYPE(RAW);
......
...@@ -13,13 +13,15 @@ ...@@ -13,13 +13,15 @@
size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_arg *arg) 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; int printed = 0, flags = arg->val;
if (flags == 0) 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) \ #define P_FLAG(n) \
if (flags & AT_##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; \ flags &= ~AT_##n; \
} }
...@@ -41,11 +43,13 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_ ...@@ -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) 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; int printed = 0, flags = arg->val;
#define P_FLAG(n) \ #define P_FLAG(n) \
if (flags & STATX_##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; \ flags &= ~STATX_##n; \
} }
......
...@@ -5,11 +5,13 @@ ...@@ -5,11 +5,13 @@
static size_t syscall_arg__scnprintf_waitid_options(char *bf, size_t size, static size_t syscall_arg__scnprintf_waitid_options(char *bf, size_t size,
struct syscall_arg *arg) struct syscall_arg *arg)
{ {
bool show_prefix = arg->show_string_prefix;
const char *prefix = "W";
int printed = 0, options = arg->val; int printed = 0, options = arg->val;
#define P_OPTION(n) \ #define P_OPTION(n) \
if (options & W##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; \ options &= ~W##n; \
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment