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

perf trace: Mark the rlim arg in the prlimit64 and setrlimit syscalls as coming from user space

With that it uses the generic BTF based pretty printer:

root@number:~# perf trace -e prlimit64
0.000 ( 0.004 ms): :3417020/3417020 prlimit64(resource: NOFILE, old_rlim: 0x7fb8842fe3b0) = 0
0.126 ( 0.003 ms): Chroot Helper/3417022 prlimit64(resource: NOFILE, old_rlim: 0x7fb8842fdfd0) = 0
12.557 ( 0.005 ms): firefox/3417020 prlimit64(resource: STACK, old_rlim: 0x7ffe9ade1b80) = 0
26.640 ( 0.006 ms): MainThread/3417020 prlimit64(resource: STACK, old_rlim: 0x7ffe9ade1780) = 0
27.553 ( 0.002 ms): Web Content/3417020 prlimit64(resource: AS, old_rlim: 0x7ffe9ade1660) = 0
29.405 ( 0.003 ms): Web Content/3417020 prlimit64(resource: NOFILE, old_rlim: 0x7ffe9ade0c80) = 0
30.471 ( 0.002 ms): Web Content/3417020 prlimit64(resource: RTTIME, old_rlim: 0x7ffe9ade1370) = 0
30.485 ( 0.001 ms): Web Content/3417020 prlimit64(resource: RTTIME, new_rlim: (struct rlimit64){.rlim_cur = (__u64)50000,.rlim_max = (__u64)200000,}) = 0
31.779 ( 0.001 ms): Web Content/3417020 prlimit64(resource: STACK, old_rlim: 0x7ffe9ade1670) = 0
^Croot@number:~#

Better than before, still needs improvements in the configurability of
the libbpf BTF dumper to get it to the strace output standard.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alan Maguire <alan.maguire@oracle.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/lkml/ZuBQI-f8CGpuhIdH@x1
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+4 -2
+4 -2
tools/perf/builtin-trace.c
··· 1309 1309 { .name = "pread", .alias = "pread64", }, 1310 1310 { .name = "preadv", .alias = "pread", }, 1311 1311 { .name = "prlimit64", 1312 - .arg = { [1] = STRARRAY(resource, rlimit_resources), }, }, 1312 + .arg = { [1] = STRARRAY(resource, rlimit_resources), 1313 + [2] = { .from_user = true /* new_rlim */, }, }, }, 1313 1314 { .name = "pwrite", .alias = "pwrite64", }, 1314 1315 { .name = "readlinkat", 1315 1316 .arg = { [0] = { .scnprintf = SCA_FDAT, /* dfd */ }, }, }, ··· 1353 1352 { .name = "setitimer", 1354 1353 .arg = { [0] = STRARRAY(which, itimers), }, }, 1355 1354 { .name = "setrlimit", 1356 - .arg = { [0] = STRARRAY(resource, rlimit_resources), }, }, 1355 + .arg = { [0] = STRARRAY(resource, rlimit_resources), 1356 + [1] = { .from_user = true /* rlim */, }, }, }, 1357 1357 { .name = "setsockopt", 1358 1358 .arg = { [1] = STRARRAY(level, socket_level), }, }, 1359 1359 { .name = "socket",