Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+142 -86
+4
tools/perf/Documentation/perf-config.txt
··· 543 543 trace.show_duration:: 544 544 Show syscall duration. 545 545 546 + trace.show_prefix:: 547 + If set to 'yes' will show common string prefixes in tables. The default 548 + is to remove the common prefix in things like "MAP_SHARED", showing just "SHARED". 549 + 546 550 trace.show_timestamp:: 547 551 Show syscall start timestamp. 548 552
+20 -10
tools/perf/builtin-trace.c
··· 132 132 bool show_duration; 133 133 bool show_zeros; 134 134 bool show_arg_names; 135 + bool show_string_prefix; 135 136 bool force; 136 137 bool vfs_getname; 137 138 int trace_pgfaults; ··· 361 360 ({ struct syscall_tp *fields = evsel->priv; \ 362 361 fields->name.pointer(&fields->name, sample); }) 363 362 364 - size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, int val) 363 + size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, bool show_prefix, int val) 365 364 { 366 365 int idx = val - sa->offset; 367 366 368 367 if (idx < 0 || idx >= sa->nr_entries || sa->entries[idx] == NULL) 369 368 return scnprintf(bf, size, intfmt, val); 370 369 371 - return scnprintf(bf, size, "%s", sa->entries[idx]); 370 + return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", sa->entries[idx]); 372 371 } 373 372 374 373 static size_t __syscall_arg__scnprintf_strarray(char *bf, size_t size, 375 374 const char *intfmt, 376 375 struct syscall_arg *arg) 377 376 { 378 - return strarray__scnprintf(arg->parm, bf, size, intfmt, arg->val); 377 + return strarray__scnprintf(arg->parm, bf, size, intfmt, arg->show_string_prefix, arg->val); 379 378 } 380 379 381 380 static size_t syscall_arg__scnprintf_strarray(char *bf, size_t size, ··· 409 408 if (idx >= 0 && idx < sa->nr_entries) { 410 409 if (sa->entries[idx] == NULL) 411 410 break; 412 - return scnprintf(bf, size, "%s", sa->entries[idx]); 411 + return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? sa->prefix : "", sa->entries[idx]); 413 412 } 414 413 } 415 414 ··· 424 423 struct syscall_arg *arg) 425 424 { 426 425 int fd = arg->val; 427 - /* char fd_at_prefix = "AT_FD"; */ 426 + const char *prefix = "AT_FD"; 428 427 429 428 if (fd == AT_FDCWD) 430 - return scnprintf(bf, size, "CWD"); 429 + return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? prefix : "", "CWD"); 431 430 432 431 return syscall_arg__scnprintf_fd(bf, size, arg); 433 432 } ··· 528 527 static size_t syscall_arg__scnprintf_access_mode(char *bf, size_t size, 529 528 struct syscall_arg *arg) 530 529 { 530 + bool show_prefix = arg->show_string_prefix; 531 + const char *suffix = "_OK"; 531 532 size_t printed = 0; 532 533 int mode = arg->val; 533 534 534 535 if (mode == F_OK) /* 0 */ 535 - return scnprintf(bf, size, "F"); 536 + return scnprintf(bf, size, "F%s", show_prefix ? suffix : ""); 536 537 #define P_MODE(n) \ 537 538 if (mode & n##_OK) { \ 538 - printed += scnprintf(bf + printed, size - printed, "%s", #n); \ 539 + printed += scnprintf(bf + printed, size - printed, "%s%s", #n, show_prefix ? suffix : ""); \ 539 540 mode &= ~n##_OK; \ 540 541 } 541 542 ··· 562 559 static size_t syscall_arg__scnprintf_pipe_flags(char *bf, size_t size, 563 560 struct syscall_arg *arg) 564 561 { 562 + bool show_prefix = arg->show_string_prefix; 563 + const char *prefix = "O_"; 565 564 int printed = 0, flags = arg->val; 566 565 567 566 #define P_FLAG(n) \ 568 567 if (flags & O_##n) { \ 569 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 568 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 570 569 flags &= ~O_##n; \ 571 570 } 572 571 ··· 594 589 static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size, 595 590 struct syscall_arg *arg) 596 591 { 592 + bool show_prefix = arg->show_string_prefix; 593 + const char *prefix = "GRND_"; 597 594 int printed = 0, flags = arg->val; 598 595 599 596 #define P_FLAG(n) \ 600 597 if (flags & GRND_##n) { \ 601 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 598 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 602 599 flags &= ~GRND_##n; \ 603 600 } 604 601 ··· 1584 1577 .mask = 0, 1585 1578 .trace = trace, 1586 1579 .thread = thread, 1580 + .show_string_prefix = trace->show_string_prefix, 1587 1581 }; 1588 1582 struct thread_trace *ttrace = thread__priv(thread); 1589 1583 ··· 3571 3563 goto out; 3572 3564 } 3573 3565 trace->show_zeros = new_show_zeros; 3566 + } else if (!strcmp(var, "trace.show_prefix")) { 3567 + trace->show_string_prefix = perf_config_bool(var, value); 3574 3568 } else if (!strcmp(var, "trace.no_inherit")) { 3575 3569 trace->opts.no_inherit = perf_config_bool(var, value); 3576 3570 } else if (!strcmp(var, "trace.args_alignment")) {
+5 -3
tools/perf/trace/beauty/beauty.h
··· 26 26 .prefix = _prefix, \ 27 27 } 28 28 29 - size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, int val); 30 - size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, unsigned long flags); 29 + size_t strarray__scnprintf(struct strarray *sa, char *bf, size_t size, const char *intfmt, bool show_prefix, int val); 30 + size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags); 31 31 32 32 struct trace; 33 33 struct thread; ··· 69 69 * @parm: private area, may be an strarray, for instance 70 70 * @idx: syscall arg idx (is this the first?) 71 71 * @mask: a syscall arg may mask another arg, see syscall_arg__scnprintf_futex_op 72 + * @show_string_prefix: When there is a common prefix in a string table, show it or not 72 73 */ 73 74 74 75 struct syscall_arg { ··· 84 83 void *parm; 85 84 u8 idx; 86 85 u8 mask; 86 + bool show_string_prefix; 87 87 }; 88 88 89 89 unsigned long syscall_arg__val(struct syscall_arg *arg, u8 idx); ··· 164 162 size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_arg *arg); 165 163 #define SCA_STATX_MASK syscall_arg__scnprintf_statx_mask 166 164 167 - size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size); 165 + size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix); 168 166 169 167 void syscall_arg__set_ret_scnprintf(struct syscall_arg *arg, 170 168 size_t (*ret_scnprintf)(char *bf, size_t size, struct syscall_arg *arg));
+4 -3
tools/perf/trace/beauty/clone.c
··· 10 10 #include <sys/types.h> 11 11 #include <uapi/linux/sched.h> 12 12 13 - static size_t clone__scnprintf_flags(unsigned long flags, char *bf, size_t size) 13 + static size_t clone__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix) 14 14 { 15 + const char *prefix = "CLONE_"; 15 16 int printed = 0; 16 17 17 18 #define P_FLAG(n) \ 18 19 if (flags & CLONE_##n) { \ 19 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 20 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 20 21 flags &= ~CLONE_##n; \ 21 22 } 22 23 ··· 71 70 if (!(flags & CLONE_SETTLS)) 72 71 arg->mask |= SCC_TLS; 73 72 74 - return clone__scnprintf_flags(flags, bf, size); 73 + return clone__scnprintf_flags(flags, bf, size, arg->show_string_prefix); 75 74 }
+3 -1
tools/perf/trace/beauty/eventfd.c
··· 13 13 14 14 static size_t syscall_arg__scnprintf_eventfd_flags(char *bf, size_t size, struct syscall_arg *arg) 15 15 { 16 + bool show_prefix = arg->show_string_prefix; 17 + const char *prefix = "EFD_"; 16 18 int printed = 0, flags = arg->val; 17 19 18 20 if (flags == 0) 19 21 return scnprintf(bf, size, "NONE"); 20 22 #define P_FLAG(n) \ 21 23 if (flags & EFD_##n) { \ 22 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 24 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 23 25 flags &= ~EFD_##n; \ 24 26 } 25 27
+11 -9
tools/perf/trace/beauty/fcntl.c
··· 9 9 #include <linux/kernel.h> 10 10 #include <uapi/linux/fcntl.h> 11 11 12 - static size_t fcntl__scnprintf_getfd(unsigned long val, char *bf, size_t size) 12 + static size_t fcntl__scnprintf_getfd(unsigned long val, char *bf, size_t size, bool show_prefix) 13 13 { 14 - return scnprintf(bf, size, "%s", val ? "CLOEXEC" : "0"); 14 + return val ? scnprintf(bf, size, "%s", "0") : 15 + scnprintf(bf, size, "%s%s", show_prefix ? "FD_" : "", "CLOEXEC"); 15 16 } 16 17 17 18 static size_t syscall_arg__scnprintf_fcntl_getfd(char *bf, size_t size, struct syscall_arg *arg) 18 19 { 19 - return fcntl__scnprintf_getfd(arg->val, bf, size); 20 + return fcntl__scnprintf_getfd(arg->val, bf, size, arg->show_string_prefix); 20 21 } 21 22 22 - static size_t fcntl__scnprintf_getlease(unsigned long val, char *bf, size_t size) 23 + static size_t fcntl__scnprintf_getlease(unsigned long val, char *bf, size_t size, bool show_prefix) 23 24 { 24 25 static const char *fcntl_setlease[] = { "RDLCK", "WRLCK", "UNLCK", }; 25 26 static DEFINE_STRARRAY(fcntl_setlease, "F_"); 26 27 27 - return strarray__scnprintf(&strarray__fcntl_setlease, bf, size, "%x", val); 28 + return strarray__scnprintf(&strarray__fcntl_setlease, bf, size, "%x", show_prefix, val); 28 29 } 29 30 30 31 static size_t syscall_arg__scnprintf_fcntl_getlease(char *bf, size_t size, struct syscall_arg *arg) 31 32 { 32 - return fcntl__scnprintf_getlease(arg->val, bf, size); 33 + return fcntl__scnprintf_getlease(arg->val, bf, size, arg->show_string_prefix); 33 34 } 34 35 35 36 size_t syscall_arg__scnprintf_fcntl_cmd(char *bf, size_t size, struct syscall_arg *arg) ··· 69 68 70 69 size_t syscall_arg__scnprintf_fcntl_arg(char *bf, size_t size, struct syscall_arg *arg) 71 70 { 71 + bool show_prefix = arg->show_string_prefix; 72 72 int cmd = syscall_arg__val(arg, 1); 73 73 74 74 if (cmd == F_DUPFD) 75 75 return syscall_arg__scnprintf_fd(bf, size, arg); 76 76 77 77 if (cmd == F_SETFD) 78 - return fcntl__scnprintf_getfd(arg->val, bf, size); 78 + return fcntl__scnprintf_getfd(arg->val, bf, size, show_prefix); 79 79 80 80 if (cmd == F_SETFL) 81 - return open__scnprintf_flags(arg->val, bf, size); 81 + return open__scnprintf_flags(arg->val, bf, size, show_prefix); 82 82 83 83 if (cmd == F_SETOWN) 84 84 return syscall_arg__scnprintf_pid(bf, size, arg); 85 85 86 86 if (cmd == F_SETLEASE) 87 - return fcntl__scnprintf_getlease(arg->val, bf, size); 87 + return fcntl__scnprintf_getlease(arg->val, bf, size, show_prefix); 88 88 /* 89 89 * We still don't grab the contents of pointers on entry or exit, 90 90 * so just print them as hex numbers
+3 -1
tools/perf/trace/beauty/flock.c
··· 22 22 23 23 size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg) 24 24 { 25 + bool show_prefix = arg->show_string_prefix; 26 + const char *prefix = "LOCK_"; 25 27 int printed = 0, op = arg->val; 26 28 27 29 if (op == 0) 28 30 return scnprintf(bf, size, "NONE"); 29 31 #define P_CMD(cmd) \ 30 32 if ((op & LOCK_##cmd) == LOCK_##cmd) { \ 31 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #cmd); \ 33 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \ 32 34 op &= ~LOCK_##cmd; \ 33 35 } 34 36
+5 -3
tools/perf/trace/beauty/futex_op.c
··· 19 19 20 20 static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, struct syscall_arg *arg) 21 21 { 22 + bool show_prefix = arg->show_string_prefix; 23 + const char *prefix = "FUTEX_"; 22 24 enum syscall_futex_args { 23 25 SCF_UADDR = (1 << 0), 24 26 SCF_OP = (1 << 1), ··· 34 32 size_t printed = 0; 35 33 36 34 switch (cmd) { 37 - #define P_FUTEX_OP(n) case FUTEX_##n: printed = scnprintf(bf, size, #n); 35 + #define P_FUTEX_OP(n) case FUTEX_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); 38 36 P_FUTEX_OP(WAIT); arg->mask |= SCF_VAL3|SCF_UADDR2; break; 39 37 P_FUTEX_OP(WAKE); arg->mask |= SCF_VAL3|SCF_UADDR2|SCF_TIMEOUT; break; 40 38 P_FUTEX_OP(FD); arg->mask |= SCF_VAL3|SCF_UADDR2|SCF_TIMEOUT; break; ··· 52 50 } 53 51 54 52 if (op & FUTEX_PRIVATE_FLAG) 55 - printed += scnprintf(bf + printed, size - printed, "|PRIV"); 53 + printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "", "PRIVATE_FLAG"); 56 54 57 55 if (op & FUTEX_CLOCK_REALTIME) 58 - printed += scnprintf(bf + printed, size - printed, "|CLKRT"); 56 + printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "", "CLOCK_REALTIME"); 59 57 60 58 return printed; 61 59 }
+2 -1
tools/perf/trace/beauty/futex_val3.c
··· 7 7 8 8 static size_t syscall_arg__scnprintf_futex_val3(char *bf, size_t size, struct syscall_arg *arg) 9 9 { 10 + const char *prefix = "FUTEX_BITSET_"; 10 11 unsigned int bitset = arg->val; 11 12 12 13 if (bitset == FUTEX_BITSET_MATCH_ANY) 13 - return scnprintf(bf, size, "MATCH_ANY"); 14 + return scnprintf(bf, size, "%s%s", arg->show_string_prefix ? prefix : "", "MATCH_ANY"); 14 15 15 16 return scnprintf(bf, size, "%#xd", bitset); 16 17 }
+9 -6
tools/perf/trace/beauty/ioctl.c
··· 112 112 return scnprintf(bf, size, "(%#x, %#x, %#x)", 0xAE, nr, dir); 113 113 } 114 114 115 - static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size) 115 + static size_t ioctl__scnprintf_cmd(unsigned long cmd, char *bf, size_t size, bool show_prefix) 116 116 { 117 + const char *prefix = "_IOC_"; 117 118 int dir = _IOC_DIR(cmd), 118 119 type = _IOC_TYPE(cmd), 119 120 nr = _IOC_NR(cmd), ··· 144 143 printed += scnprintf(bf + printed, size - printed, "%c", '('); 145 144 146 145 if (dir == _IOC_NONE) { 147 - printed += scnprintf(bf + printed, size - printed, "%s", "NONE"); 146 + printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? prefix : "", "NONE"); 148 147 } else { 149 148 if (dir & _IOC_READ) 150 - printed += scnprintf(bf + printed, size - printed, "%s", "READ"); 151 - if (dir & _IOC_WRITE) 152 - printed += scnprintf(bf + printed, size - printed, "%s%s", dir & _IOC_READ ? "|" : "", "WRITE"); 149 + printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? prefix : "", "READ"); 150 + if (dir & _IOC_WRITE) { 151 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", dir & _IOC_READ ? "|" : "", 152 + show_prefix ? prefix : "", "WRITE"); 153 + } 153 154 } 154 155 155 156 return printed + scnprintf(bf + printed, size - printed, ", %#x, %#x, %#x)", type, nr, sz); ··· 161 158 { 162 159 unsigned long cmd = arg->val; 163 160 164 - return ioctl__scnprintf_cmd(cmd, bf, size); 161 + return ioctl__scnprintf_cmd(cmd, bf, size, arg->show_string_prefix); 165 162 }
+3 -3
tools/perf/trace/beauty/kcmp.c
··· 26 26 return pid__scnprintf_fd(arg->trace, pid, fd, bf, size); 27 27 } 28 28 29 - static size_t kcmp__scnprintf_type(int type, char *bf, size_t size) 29 + static size_t kcmp__scnprintf_type(int type, char *bf, size_t size, bool show_prefix) 30 30 { 31 31 static DEFINE_STRARRAY(kcmp_types, "KCMP_"); 32 - return strarray__scnprintf(&strarray__kcmp_types, bf, size, "%d", type); 32 + return strarray__scnprintf(&strarray__kcmp_types, bf, size, "%d", show_prefix, type); 33 33 } 34 34 35 35 size_t syscall_arg__scnprintf_kcmp_type(char *bf, size_t size, struct syscall_arg *arg) ··· 39 39 if (type != KCMP_FILE) 40 40 arg->mask |= (1 << 3) | (1 << 4); /* Ignore idx1 and idx2 */ 41 41 42 - return kcmp__scnprintf_type(type, bf, size); 42 + return kcmp__scnprintf_type(type, bf, size, arg->show_string_prefix); 43 43 }
+10 -6
tools/perf/trace/beauty/mmap.c
··· 5 5 static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, 6 6 struct syscall_arg *arg) 7 7 { 8 + const char *prot_prefix = "PROT_"; 8 9 int printed = 0, prot = arg->val; 10 + bool show_prefix = arg->show_string_prefix; 9 11 10 12 if (prot == PROT_NONE) 11 - return scnprintf(bf, size, "NONE"); 13 + return scnprintf(bf, size, "%sNONE", show_prefix ? prot_prefix : ""); 12 14 #define P_MMAP_PROT(n) \ 13 15 if (prot & PROT_##n) { \ 14 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 16 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prot_prefix :"", #n); \ 15 17 prot &= ~PROT_##n; \ 16 18 } 17 19 ··· 33 31 34 32 #define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot 35 33 36 - static size_t mmap__scnprintf_flags(unsigned long flags, char *bf, size_t size) 34 + static size_t mmap__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix) 37 35 { 38 36 #include "trace/beauty/generated/mmap_flags_array.c" 39 37 static DEFINE_STRARRAY(mmap_flags, "MAP_"); 40 38 41 - return strarray__scnprintf_flags(&strarray__mmap_flags, bf, size, flags); 39 + return strarray__scnprintf_flags(&strarray__mmap_flags, bf, size, show_prefix, flags); 42 40 } 43 41 44 42 static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size, ··· 49 47 if (flags & MAP_ANONYMOUS) 50 48 arg->mask |= (1 << 4) | (1 << 5); /* Mask 4th ('fd') and 5th ('offset') args, ignored */ 51 49 52 - return mmap__scnprintf_flags(flags, bf, size); 50 + return mmap__scnprintf_flags(flags, bf, size, arg->show_string_prefix); 53 51 } 54 52 55 53 #define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags ··· 57 55 static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size, 58 56 struct syscall_arg *arg) 59 57 { 58 + const char *flags_prefix = "MREMAP_"; 59 + bool show_prefix = arg->show_string_prefix; 60 60 int printed = 0, flags = arg->val; 61 61 62 62 #define P_MREMAP_FLAG(n) \ 63 63 if (flags & MREMAP_##n) { \ 64 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 64 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? flags_prefix : "", #n); \ 65 65 flags &= ~MREMAP_##n; \ 66 66 } 67 67
+3 -1
tools/perf/trace/beauty/mode_t.c
··· 22 22 23 23 static size_t syscall_arg__scnprintf_mode_t(char *bf, size_t size, struct syscall_arg *arg) 24 24 { 25 + bool show_prefix = arg->show_string_prefix; 26 + const char *prefix = "S_"; 25 27 int printed = 0, mode = arg->val; 26 28 27 29 #define P_MODE(n) \ 28 30 if ((mode & S_##n) == S_##n) { \ 29 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 31 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 30 32 mode &= ~S_##n; \ 31 33 } 32 34
+3 -3
tools/perf/trace/beauty/mount_flags.c
··· 11 11 #include <linux/log2.h> 12 12 #include <sys/mount.h> 13 13 14 - static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size) 14 + static size_t mount__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix) 15 15 { 16 16 #include "trace/beauty/generated/mount_flags_array.c" 17 17 static DEFINE_STRARRAY(mount_flags, "MS_"); 18 18 19 - return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, flags); 19 + return strarray__scnprintf_flags(&strarray__mount_flags, bf, size, show_prefix, flags); 20 20 } 21 21 22 22 unsigned long syscall_arg__mask_val_mount_flags(struct syscall_arg *arg __maybe_unused, unsigned long flags) ··· 39 39 { 40 40 unsigned long flags = arg->val; 41 41 42 - return mount__scnprintf_flags(flags, bf, size); 42 + return mount__scnprintf_flags(flags, bf, size, arg->show_string_prefix); 43 43 }
+3 -1
tools/perf/trace/beauty/msg_flags.c
··· 21 21 static size_t syscall_arg__scnprintf_msg_flags(char *bf, size_t size, 22 22 struct syscall_arg *arg) 23 23 { 24 + bool show_prefix = arg->show_string_prefix; 25 + const char *prefix = "MSG_"; 24 26 int printed = 0, flags = arg->val; 25 27 26 28 if (flags == 0) 27 29 return scnprintf(bf, size, "NONE"); 28 30 #define P_MSG_FLAG(n) \ 29 31 if (flags & MSG_##n) { \ 30 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 32 + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 31 33 flags &= ~MSG_##n; \ 32 34 } 33 35
+6 -5
tools/perf/trace/beauty/open_flags.c
··· 22 22 #undef O_LARGEFILE 23 23 #define O_LARGEFILE 00100000 24 24 25 - size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size) 25 + size_t open__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix) 26 26 { 27 + const char *prefix = "O_"; 27 28 int printed = 0; 28 29 29 30 if (flags == 0) 30 - return scnprintf(bf, size, "RDONLY"); 31 + return scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", "RDONLY"); 31 32 #define P_FLAG(n) \ 32 33 if (flags & O_##n) { \ 33 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 34 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 34 35 flags &= ~O_##n; \ 35 36 } 36 37 ··· 58 57 #endif 59 58 #ifdef O_DSYNC 60 59 if ((flags & O_SYNC) == O_SYNC) 61 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", "SYNC"); 60 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", "SYNC"); 62 61 else { 63 62 P_FLAG(DSYNC); 64 63 } ··· 82 81 if (!(flags & O_CREAT)) 83 82 arg->mask |= 1 << (arg->idx + 1); /* Mask the mode parm */ 84 83 85 - return open__scnprintf_flags(flags, bf, size); 84 + return open__scnprintf_flags(flags, bf, size, arg->show_string_prefix); 86 85 }
+3 -1
tools/perf/trace/beauty/perf_event_open.c
··· 18 18 static size_t syscall_arg__scnprintf_perf_flags(char *bf, size_t size, 19 19 struct syscall_arg *arg) 20 20 { 21 + bool show_prefix = arg->show_string_prefix; 22 + const char *prefix = "PERF_"; 21 23 int printed = 0, flags = arg->val; 22 24 23 25 if (flags == 0) ··· 27 25 28 26 #define P_FLAG(n) \ 29 27 if (flags & PERF_FLAG_##n) { \ 30 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 28 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 31 29 flags &= ~PERF_FLAG_##n; \ 32 30 } 33 31
+6 -6
tools/perf/trace/beauty/pkey_alloc.c
··· 9 9 #include <linux/kernel.h> 10 10 #include <linux/log2.h> 11 11 12 - size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, unsigned long flags) 12 + size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags) 13 13 { 14 14 int i, printed = 0; 15 15 16 16 if (flags == 0) { 17 17 const char *s = sa->entries[0]; 18 18 if (s) 19 - return scnprintf(bf, size, "%s", s); 19 + return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", s); 20 20 return scnprintf(bf, size, "%d", 0); 21 21 } 22 22 ··· 30 30 printed += scnprintf(bf + printed, size - printed, "|"); 31 31 32 32 if (sa->entries[i] != NULL) 33 - printed += scnprintf(bf + printed, size - printed, "%s", sa->entries[i]); 33 + printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? sa->prefix : "", sa->entries[i]); 34 34 else 35 35 printed += scnprintf(bf + printed, size - printed, "0x%#", bit); 36 36 } ··· 38 38 return printed; 39 39 } 40 40 41 - static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size) 41 + static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size, bool show_prefix) 42 42 { 43 43 #include "trace/beauty/generated/pkey_alloc_access_rights_array.c" 44 44 static DEFINE_STRARRAY(pkey_alloc_access_rights, "PKEY_"); 45 45 46 - return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, access_rights); 46 + return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, show_prefix, access_rights); 47 47 } 48 48 49 49 size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg) 50 50 { 51 51 unsigned long cmd = arg->val; 52 52 53 - return pkey_alloc__scnprintf_access_rights(cmd, bf, size); 53 + return pkey_alloc__scnprintf_access_rights(cmd, bf, size, arg->show_string_prefix); 54 54 }
+6 -6
tools/perf/trace/beauty/prctl.c
··· 11 11 12 12 #include "trace/beauty/generated/prctl_option_array.c" 13 13 14 - static size_t prctl__scnprintf_option(int option, char *bf, size_t size) 14 + static size_t prctl__scnprintf_option(int option, char *bf, size_t size, bool show_prefix) 15 15 { 16 16 static DEFINE_STRARRAY(prctl_options, "PR_"); 17 - return strarray__scnprintf(&strarray__prctl_options, bf, size, "%d", option); 17 + return strarray__scnprintf(&strarray__prctl_options, bf, size, "%d", show_prefix, option); 18 18 } 19 19 20 - static size_t prctl__scnprintf_set_mm(int option, char *bf, size_t size) 20 + static size_t prctl__scnprintf_set_mm(int option, char *bf, size_t size, bool show_prefix) 21 21 { 22 22 static DEFINE_STRARRAY(prctl_set_mm_options, "PR_SET_MM_"); 23 - return strarray__scnprintf(&strarray__prctl_set_mm_options, bf, size, "%d", option); 23 + return strarray__scnprintf(&strarray__prctl_set_mm_options, bf, size, "%d", show_prefix, option); 24 24 } 25 25 26 26 size_t syscall_arg__scnprintf_prctl_arg2(char *bf, size_t size, struct syscall_arg *arg) ··· 28 28 int option = syscall_arg__val(arg, 0); 29 29 30 30 if (option == PR_SET_MM) 31 - return prctl__scnprintf_set_mm(arg->val, bf, size); 31 + return prctl__scnprintf_set_mm(arg->val, bf, size, arg->show_string_prefix); 32 32 /* 33 33 * We still don't grab the contents of pointers on entry or exit, 34 34 * so just print them as hex numbers ··· 77 77 if (option < ARRAY_SIZE(masks)) 78 78 arg->mask |= masks[option]; 79 79 80 - return prctl__scnprintf_option(option, bf, size); 80 + return prctl__scnprintf_option(option, bf, size, arg->show_string_prefix); 81 81 }
+3 -3
tools/perf/trace/beauty/renameat.c
··· 4 4 #include "trace/beauty/beauty.h" 5 5 #include <uapi/linux/fs.h> 6 6 7 - static size_t renameat2__scnprintf_flags(unsigned long flags, char *bf, size_t size) 7 + static size_t renameat2__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix) 8 8 { 9 9 #include "trace/beauty/generated/rename_flags_array.c" 10 10 static DEFINE_STRARRAY(rename_flags, "RENAME_"); 11 11 12 - return strarray__scnprintf_flags(&strarray__rename_flags, bf, size, flags); 12 + return strarray__scnprintf_flags(&strarray__rename_flags, bf, size, show_prefix, flags); 13 13 } 14 14 15 15 size_t syscall_arg__scnprintf_renameat2_flags(char *bf, size_t size, struct syscall_arg *arg) 16 16 { 17 17 unsigned long flags = arg->val; 18 - return renameat2__scnprintf_flags(flags, bf, size); 18 + return renameat2__scnprintf_flags(flags, bf, size, arg->show_string_prefix); 19 19 }
+4 -2
tools/perf/trace/beauty/sched_policy.c
··· 17 17 static size_t syscall_arg__scnprintf_sched_policy(char *bf, size_t size, 18 18 struct syscall_arg *arg) 19 19 { 20 + bool show_prefix = arg->show_string_prefix; 21 + const char *prefix = "SCHED_"; 20 22 const char *policies[] = { 21 23 "NORMAL", "FIFO", "RR", "BATCH", "ISO", "IDLE", "DEADLINE", 22 24 }; ··· 28 26 29 27 policy &= SCHED_POLICY_MASK; 30 28 if (policy <= SCHED_DEADLINE) 31 - printed = scnprintf(bf, size, "%s", policies[policy]); 29 + printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", policies[policy]); 32 30 else 33 31 printed = scnprintf(bf, size, "%#x", policy); 34 32 35 33 #define P_POLICY_FLAG(n) \ 36 34 if (flags & SCHED_##n) { \ 37 - printed += scnprintf(bf + printed, size - printed, "|%s", #n); \ 35 + printed += scnprintf(bf + printed, size - printed, "|%s%s", show_prefix ? prefix : "", #n); \ 38 36 flags &= ~SCHED_##n; \ 39 37 } 40 38
+6 -2
tools/perf/trace/beauty/seccomp.c
··· 8 8 9 9 static size_t syscall_arg__scnprintf_seccomp_op(char *bf, size_t size, struct syscall_arg *arg) 10 10 { 11 + bool show_prefix = arg->show_string_prefix; 12 + const char *prefix = "SECOMP_SET_MODE_"; 11 13 int op = arg->val; 12 14 size_t printed = 0; 13 15 14 16 switch (op) { 15 - #define P_SECCOMP_SET_MODE_OP(n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, #n); break 17 + #define P_SECCOMP_SET_MODE_OP(n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); break 16 18 P_SECCOMP_SET_MODE_OP(STRICT); 17 19 P_SECCOMP_SET_MODE_OP(FILTER); 18 20 #undef P_SECCOMP_SET_MODE_OP ··· 33 31 static size_t syscall_arg__scnprintf_seccomp_flags(char *bf, size_t size, 34 32 struct syscall_arg *arg) 35 33 { 34 + bool show_prefix = arg->show_string_prefix; 35 + const char *prefix = "SECOMP_FILTER_FLAG_"; 36 36 int printed = 0, flags = arg->val; 37 37 38 38 #define P_FLAG(n) \ 39 39 if (flags & SECCOMP_FILTER_FLAG_##n) { \ 40 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 40 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 41 41 flags &= ~SECCOMP_FILTER_FLAG_##n; \ 42 42 } 43 43
+3 -1
tools/perf/trace/beauty/signum.c
··· 3 3 4 4 static size_t syscall_arg__scnprintf_signum(char *bf, size_t size, struct syscall_arg *arg) 5 5 { 6 + bool show_prefix = arg->show_string_prefix; 7 + const char *prefix = "SIG"; 6 8 int sig = arg->val; 7 9 8 10 switch (sig) { 9 - #define P_SIGNUM(n) case SIG##n: return scnprintf(bf, size, #n) 11 + #define P_SIGNUM(n) case SIG##n: return scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n) 10 12 P_SIGNUM(HUP); 11 13 P_SIGNUM(INT); 12 14 P_SIGNUM(QUIT);
+1 -1
tools/perf/trace/beauty/sockaddr.c
··· 58 58 char family[32]; 59 59 size_t printed; 60 60 61 - strarray__scnprintf(&strarray__socket_families, family, sizeof(family), "%d", sa->sa_family); 61 + strarray__scnprintf(&strarray__socket_families, family, sizeof(family), "%d", arg->show_string_prefix, sa->sa_family); 62 62 printed = scnprintf(bf, size, "{ .family: %s", family); 63 63 64 64 if (sa->sa_family < ARRAY_SIZE(af_scnprintfs) && af_scnprintfs[sa->sa_family])
+3 -3
tools/perf/trace/beauty/socket.c
··· 9 9 #include <sys/types.h> 10 10 #include <sys/socket.h> 11 11 12 - static size_t socket__scnprintf_ipproto(int protocol, char *bf, size_t size) 12 + static size_t socket__scnprintf_ipproto(int protocol, char *bf, size_t size, bool show_prefix) 13 13 { 14 14 #include "trace/beauty/generated/socket_ipproto_array.c" 15 15 static DEFINE_STRARRAY(socket_ipproto, "IPPROTO_"); 16 16 17 - return strarray__scnprintf(&strarray__socket_ipproto, bf, size, "%d", protocol); 17 + return strarray__scnprintf(&strarray__socket_ipproto, bf, size, "%d", show_prefix, protocol); 18 18 } 19 19 20 20 size_t syscall_arg__scnprintf_socket_protocol(char *bf, size_t size, struct syscall_arg *arg) ··· 22 22 int domain = syscall_arg__val(arg, 0); 23 23 24 24 if (domain == AF_INET || domain == AF_INET6) 25 - return socket__scnprintf_ipproto(arg->val, bf, size); 25 + return socket__scnprintf_ipproto(arg->val, bf, size, arg->show_string_prefix); 26 26 27 27 return syscall_arg__scnprintf_int(bf, size, arg); 28 28 }
+3 -1
tools/perf/trace/beauty/socket_type.c
··· 20 20 21 21 static size_t syscall_arg__scnprintf_socket_type(char *bf, size_t size, struct syscall_arg *arg) 22 22 { 23 + bool show_prefix = arg->show_string_prefix; 24 + const char *prefix = "SOCK_"; 23 25 size_t printed; 24 26 int type = arg->val, 25 27 flags = type & ~SOCK_TYPE_MASK; ··· 31 29 * Can't use a strarray, MIPS may override for ABI reasons. 32 30 */ 33 31 switch (type) { 34 - #define P_SK_TYPE(n) case SOCK_##n: printed = scnprintf(bf, size, #n); break; 32 + #define P_SK_TYPE(n) case SOCK_##n: printed = scnprintf(bf, size, "%s%s", show_prefix ? prefix : "", #n); break; 35 33 P_SK_TYPE(STREAM); 36 34 P_SK_TYPE(DGRAM); 37 35 P_SK_TYPE(RAW);
+7 -3
tools/perf/trace/beauty/statx.c
··· 13 13 14 14 size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_arg *arg) 15 15 { 16 + bool show_prefix = arg->show_string_prefix; 17 + const char *prefix = "AT_"; 16 18 int printed = 0, flags = arg->val; 17 19 18 20 if (flags == 0) 19 - return scnprintf(bf, size, "SYNC_AS_STAT"); 21 + return scnprintf(bf, size, "%s%s", show_prefix ? "AT_STATX_" : "", "SYNC_AS_STAT"); 20 22 #define P_FLAG(n) \ 21 23 if (flags & AT_##n) { \ 22 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 24 + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 23 25 flags &= ~AT_##n; \ 24 26 } 25 27 ··· 43 41 44 42 size_t syscall_arg__scnprintf_statx_mask(char *bf, size_t size, struct syscall_arg *arg) 45 43 { 44 + bool show_prefix = arg->show_string_prefix; 45 + const char *prefix = "STATX_"; 46 46 int printed = 0, flags = arg->val; 47 47 48 48 #define P_FLAG(n) \ 49 49 if (flags & STATX_##n) { \ 50 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 50 + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \ 51 51 flags &= ~STATX_##n; \ 52 52 } 53 53
+3 -1
tools/perf/trace/beauty/waitid_options.c
··· 5 5 static size_t syscall_arg__scnprintf_waitid_options(char *bf, size_t size, 6 6 struct syscall_arg *arg) 7 7 { 8 + bool show_prefix = arg->show_string_prefix; 9 + const char *prefix = "W"; 8 10 int printed = 0, options = arg->val; 9 11 10 12 #define P_OPTION(n) \ 11 13 if (options & W##n) { \ 12 - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ 14 + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : #n); \ 13 15 options &= ~W##n; \ 14 16 } 15 17