perf trace: Use the ptr->name beautifier as default for "filename" args

Auto-attach the ptr->name beautifier to syscall args "filename", "path"
and "pathname" if they are of type "const char *".

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Milian Wolff <milian.wolff@kdab.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-jxii4qmcgoppftv0zdvml9d7@git.kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
上级 b6565c90
...@@ -576,44 +576,36 @@ static struct syscall_fmt { ...@@ -576,44 +576,36 @@ static struct syscall_fmt {
bool hexret; bool hexret;
} syscall_fmts[] = { } syscall_fmts[] = {
{ .name = "access", .errmsg = true, { .name = "access", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ .arg_scnprintf = { [1] = SCA_ACCMODE, /* mode */ }, },
[1] = SCA_ACCMODE, /* mode */ }, },
{ .name = "arch_prctl", .errmsg = true, .alias = "prctl", }, { .name = "arch_prctl", .errmsg = true, .alias = "prctl", },
{ .name = "bpf", .errmsg = true, STRARRAY(0, cmd, bpf_cmd), }, { .name = "bpf", .errmsg = true, STRARRAY(0, cmd, bpf_cmd), },
{ .name = "brk", .hexret = true, { .name = "brk", .hexret = true,
.arg_scnprintf = { [0] = SCA_HEX, /* brk */ }, }, .arg_scnprintf = { [0] = SCA_HEX, /* brk */ }, },
{ .name = "chdir", .errmsg = true, { .name = "chdir", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, }, { .name = "chmod", .errmsg = true, },
{ .name = "chmod", .errmsg = true, { .name = "chroot", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "chroot", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "clock_gettime", .errmsg = true, STRARRAY(0, clk_id, clockid), }, { .name = "clock_gettime", .errmsg = true, STRARRAY(0, clk_id, clockid), },
{ .name = "clone", .errpid = true, }, { .name = "clone", .errpid = true, },
{ .name = "close", .errmsg = true, { .name = "close", .errmsg = true,
.arg_scnprintf = { [0] = SCA_CLOSE_FD, /* fd */ }, }, .arg_scnprintf = { [0] = SCA_CLOSE_FD, /* fd */ }, },
{ .name = "connect", .errmsg = true, }, { .name = "connect", .errmsg = true, },
{ .name = "creat", .errmsg = true, { .name = "creat", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "dup", .errmsg = true, }, { .name = "dup", .errmsg = true, },
{ .name = "dup2", .errmsg = true, }, { .name = "dup2", .errmsg = true, },
{ .name = "dup3", .errmsg = true, }, { .name = "dup3", .errmsg = true, },
{ .name = "epoll_ctl", .errmsg = true, STRARRAY(1, op, epoll_ctl_ops), }, { .name = "epoll_ctl", .errmsg = true, STRARRAY(1, op, epoll_ctl_ops), },
{ .name = "eventfd2", .errmsg = true, { .name = "eventfd2", .errmsg = true,
.arg_scnprintf = { [1] = SCA_EFD_FLAGS, /* flags */ }, }, .arg_scnprintf = { [1] = SCA_EFD_FLAGS, /* flags */ }, },
{ .name = "faccessat", .errmsg = true, { .name = "faccessat", .errmsg = true, },
.arg_scnprintf = { [1] = SCA_FILENAME, /* filename */ }, },
{ .name = "fadvise64", .errmsg = true, }, { .name = "fadvise64", .errmsg = true, },
{ .name = "fallocate", .errmsg = true, }, { .name = "fallocate", .errmsg = true, },
{ .name = "fchdir", .errmsg = true, }, { .name = "fchdir", .errmsg = true, },
{ .name = "fchmod", .errmsg = true, }, { .name = "fchmod", .errmsg = true, },
{ .name = "fchmodat", .errmsg = true, { .name = "fchmodat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
[1] = SCA_FILENAME, /* filename */ }, },
{ .name = "fchown", .errmsg = true, }, { .name = "fchown", .errmsg = true, },
{ .name = "fchownat", .errmsg = true, { .name = "fchownat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
[1] = SCA_FILENAME, /* filename */ }, },
{ .name = "fcntl", .errmsg = true, { .name = "fcntl", .errmsg = true,
.arg_scnprintf = { [1] = SCA_STRARRAY, /* cmd */ }, .arg_scnprintf = { [1] = SCA_STRARRAY, /* cmd */ },
.arg_parm = { [1] = &strarray__fcntl_cmds, /* cmd */ }, }, .arg_parm = { [1] = &strarray__fcntl_cmds, /* cmd */ }, },
...@@ -622,16 +614,14 @@ static struct syscall_fmt { ...@@ -622,16 +614,14 @@ static struct syscall_fmt {
.arg_scnprintf = { [1] = SCA_FLOCK, /* cmd */ }, }, .arg_scnprintf = { [1] = SCA_FLOCK, /* cmd */ }, },
{ .name = "fsetxattr", .errmsg = true, }, { .name = "fsetxattr", .errmsg = true, },
{ .name = "fstat", .errmsg = true, .alias = "newfstat", }, { .name = "fstat", .errmsg = true, .alias = "newfstat", },
{ .name = "fstatat", .errmsg = true, .alias = "newfstatat", { .name = "fstatat", .errmsg = true, .alias = "newfstatat", },
.arg_scnprintf = { [1] = SCA_FILENAME, /* filename */ }, },
{ .name = "fstatfs", .errmsg = true, }, { .name = "fstatfs", .errmsg = true, },
{ .name = "fsync", .errmsg = true, }, { .name = "fsync", .errmsg = true, },
{ .name = "ftruncate", .errmsg = true, }, { .name = "ftruncate", .errmsg = true, },
{ .name = "futex", .errmsg = true, { .name = "futex", .errmsg = true,
.arg_scnprintf = { [1] = SCA_FUTEX_OP, /* op */ }, }, .arg_scnprintf = { [1] = SCA_FUTEX_OP, /* op */ }, },
{ .name = "futimesat", .errmsg = true, { .name = "futimesat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
[1] = SCA_FILENAME, /* filename */ }, },
{ .name = "getdents", .errmsg = true, }, { .name = "getdents", .errmsg = true, },
{ .name = "getdents64", .errmsg = true, }, { .name = "getdents64", .errmsg = true, },
{ .name = "getitimer", .errmsg = true, STRARRAY(0, which, itimers), }, { .name = "getitimer", .errmsg = true, STRARRAY(0, which, itimers), },
...@@ -641,10 +631,8 @@ static struct syscall_fmt { ...@@ -641,10 +631,8 @@ static struct syscall_fmt {
{ .name = "getrandom", .errmsg = true, { .name = "getrandom", .errmsg = true,
.arg_scnprintf = { [2] = SCA_GETRANDOM_FLAGS, /* flags */ }, }, .arg_scnprintf = { [2] = SCA_GETRANDOM_FLAGS, /* flags */ }, },
{ .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), }, { .name = "getrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
{ .name = "getxattr", .errmsg = true, { .name = "getxattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, { .name = "inotify_add_watch", .errmsg = true, },
{ .name = "inotify_add_watch", .errmsg = true,
.arg_scnprintf = { [1] = SCA_FILENAME, /* pathname */ }, },
{ .name = "ioctl", .errmsg = true, { .name = "ioctl", .errmsg = true,
.arg_scnprintf = { .arg_scnprintf = {
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
...@@ -660,40 +648,28 @@ static struct syscall_fmt { ...@@ -660,40 +648,28 @@ static struct syscall_fmt {
{ .name = "keyctl", .errmsg = true, STRARRAY(0, option, keyctl_options), }, { .name = "keyctl", .errmsg = true, STRARRAY(0, option, keyctl_options), },
{ .name = "kill", .errmsg = true, { .name = "kill", .errmsg = true,
.arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
{ .name = "lchown", .errmsg = true, { .name = "lchown", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, }, { .name = "lgetxattr", .errmsg = true, },
{ .name = "lgetxattr", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "linkat", .errmsg = true, { .name = "linkat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, }, .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
{ .name = "listxattr", .errmsg = true, { .name = "listxattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, { .name = "llistxattr", .errmsg = true, },
{ .name = "llistxattr", .errmsg = true, { .name = "lremovexattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "lremovexattr", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "lseek", .errmsg = true, { .name = "lseek", .errmsg = true,
.arg_scnprintf = { [2] = SCA_STRARRAY, /* whence */ }, .arg_scnprintf = { [2] = SCA_STRARRAY, /* whence */ },
.arg_parm = { [2] = &strarray__whences, /* whence */ }, }, .arg_parm = { [2] = &strarray__whences, /* whence */ }, },
{ .name = "lsetxattr", .errmsg = true, { .name = "lsetxattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, { .name = "lstat", .errmsg = true, .alias = "newlstat", },
{ .name = "lstat", .errmsg = true, .alias = "newlstat", { .name = "lsxattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "lsxattr", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "madvise", .errmsg = true, { .name = "madvise", .errmsg = true,
.arg_scnprintf = { [0] = SCA_HEX, /* start */ .arg_scnprintf = { [0] = SCA_HEX, /* start */
[2] = SCA_MADV_BHV, /* behavior */ }, }, [2] = SCA_MADV_BHV, /* behavior */ }, },
{ .name = "mkdir", .errmsg = true, { .name = "mkdir", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "mkdirat", .errmsg = true, { .name = "mkdirat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
[1] = SCA_FILENAME, /* pathname */ }, }, { .name = "mknod", .errmsg = true, },
{ .name = "mknod", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "mknodat", .errmsg = true, { .name = "mknodat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* fd */ .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
[1] = SCA_FILENAME, /* filename */ }, },
{ .name = "mlock", .errmsg = true, { .name = "mlock", .errmsg = true,
.arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
{ .name = "mlockall", .errmsg = true, { .name = "mlockall", .errmsg = true,
...@@ -718,17 +694,14 @@ static struct syscall_fmt { ...@@ -718,17 +694,14 @@ static struct syscall_fmt {
{ .name = "name_to_handle_at", .errmsg = true, { .name = "name_to_handle_at", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, }, .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
{ .name = "newfstatat", .errmsg = true, { .name = "newfstatat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
[1] = SCA_FILENAME, /* filename */ }, },
{ .name = "open", .errmsg = true, { .name = "open", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ .arg_scnprintf = { [1] = SCA_OPEN_FLAGS, /* flags */ }, },
[1] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "open_by_handle_at", .errmsg = true, { .name = "open_by_handle_at", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */
[2] = SCA_OPEN_FLAGS, /* flags */ }, }, [2] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "openat", .errmsg = true, { .name = "openat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */
[1] = SCA_FILENAME, /* filename */
[2] = SCA_OPEN_FLAGS, /* flags */ }, }, [2] = SCA_OPEN_FLAGS, /* flags */ }, },
{ .name = "perf_event_open", .errmsg = true, { .name = "perf_event_open", .errmsg = true,
.arg_scnprintf = { [2] = SCA_INT, /* cpu */ .arg_scnprintf = { [2] = SCA_INT, /* cpu */
...@@ -744,11 +717,9 @@ static struct syscall_fmt { ...@@ -744,11 +717,9 @@ static struct syscall_fmt {
{ .name = "pwrite", .errmsg = true, .alias = "pwrite64", }, { .name = "pwrite", .errmsg = true, .alias = "pwrite64", },
{ .name = "pwritev", .errmsg = true, }, { .name = "pwritev", .errmsg = true, },
{ .name = "read", .errmsg = true, }, { .name = "read", .errmsg = true, },
{ .name = "readlink", .errmsg = true, { .name = "readlink", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* path */ }, },
{ .name = "readlinkat", .errmsg = true, { .name = "readlinkat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
[1] = SCA_FILENAME, /* pathname */ }, },
{ .name = "readv", .errmsg = true, }, { .name = "readv", .errmsg = true, },
{ .name = "recvfrom", .errmsg = true, { .name = "recvfrom", .errmsg = true,
.arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, },
...@@ -756,12 +727,10 @@ static struct syscall_fmt { ...@@ -756,12 +727,10 @@ static struct syscall_fmt {
.arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, },
{ .name = "recvmsg", .errmsg = true, { .name = "recvmsg", .errmsg = true,
.arg_scnprintf = { [2] = SCA_MSG_FLAGS, /* flags */ }, }, .arg_scnprintf = { [2] = SCA_MSG_FLAGS, /* flags */ }, },
{ .name = "removexattr", .errmsg = true, { .name = "removexattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "renameat", .errmsg = true, { .name = "renameat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, }, .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
{ .name = "rmdir", .errmsg = true, { .name = "rmdir", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "rt_sigaction", .errmsg = true, { .name = "rt_sigaction", .errmsg = true,
.arg_scnprintf = { [0] = SCA_SIGNUM, /* sig */ }, }, .arg_scnprintf = { [0] = SCA_SIGNUM, /* sig */ }, },
{ .name = "rt_sigprocmask", .errmsg = true, STRARRAY(0, how, sighow), }, { .name = "rt_sigprocmask", .errmsg = true, STRARRAY(0, how, sighow), },
...@@ -785,8 +754,7 @@ static struct syscall_fmt { ...@@ -785,8 +754,7 @@ static struct syscall_fmt {
{ .name = "setitimer", .errmsg = true, STRARRAY(0, which, itimers), }, { .name = "setitimer", .errmsg = true, STRARRAY(0, which, itimers), },
{ .name = "setpgid", .errmsg = true, }, { .name = "setpgid", .errmsg = true, },
{ .name = "setrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), }, { .name = "setrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
{ .name = "setxattr", .errmsg = true, { .name = "setxattr", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "shutdown", .errmsg = true, }, { .name = "shutdown", .errmsg = true, },
{ .name = "socket", .errmsg = true, { .name = "socket", .errmsg = true,
.arg_scnprintf = { [0] = SCA_STRARRAY, /* family */ .arg_scnprintf = { [0] = SCA_STRARRAY, /* family */
...@@ -796,10 +764,8 @@ static struct syscall_fmt { ...@@ -796,10 +764,8 @@ static struct syscall_fmt {
.arg_scnprintf = { [0] = SCA_STRARRAY, /* family */ .arg_scnprintf = { [0] = SCA_STRARRAY, /* family */
[1] = SCA_SK_TYPE, /* type */ }, [1] = SCA_SK_TYPE, /* type */ },
.arg_parm = { [0] = &strarray__socket_families, /* family */ }, }, .arg_parm = { [0] = &strarray__socket_families, /* family */ }, },
{ .name = "stat", .errmsg = true, .alias = "newstat", { .name = "stat", .errmsg = true, .alias = "newstat", },
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, { .name = "statfs", .errmsg = true, },
{ .name = "statfs", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
{ .name = "swapoff", .errmsg = true, { .name = "swapoff", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* specialfile */ }, }, .arg_scnprintf = { [0] = SCA_FILENAME, /* specialfile */ }, },
{ .name = "swapon", .errmsg = true, { .name = "swapon", .errmsg = true,
...@@ -810,19 +776,14 @@ static struct syscall_fmt { ...@@ -810,19 +776,14 @@ static struct syscall_fmt {
.arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, }, .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, },
{ .name = "tkill", .errmsg = true, { .name = "tkill", .errmsg = true,
.arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
{ .name = "truncate", .errmsg = true, { .name = "truncate", .errmsg = true, },
.arg_scnprintf = { [0] = SCA_FILENAME, /* path */ }, },
{ .name = "uname", .errmsg = true, .alias = "newuname", }, { .name = "uname", .errmsg = true, .alias = "newuname", },
{ .name = "unlinkat", .errmsg = true, { .name = "unlinkat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dfd */ }, },
[1] = SCA_FILENAME, /* pathname */ }, }, { .name = "utime", .errmsg = true, },
{ .name = "utime", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "utimensat", .errmsg = true, { .name = "utimensat", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FDAT, /* dirfd */ .arg_scnprintf = { [0] = SCA_FDAT, /* dirfd */ }, },
[1] = SCA_FILENAME, /* filename */ }, }, { .name = "utimes", .errmsg = true, },
{ .name = "utimes", .errmsg = true,
.arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
{ .name = "vmsplice", .errmsg = true, }, { .name = "vmsplice", .errmsg = true, },
{ .name = "wait4", .errpid = true, { .name = "wait4", .errpid = true,
.arg_scnprintf = { [2] = SCA_WAITID_OPTIONS, /* options */ }, }, .arg_scnprintf = { [2] = SCA_WAITID_OPTIONS, /* options */ }, },
...@@ -1178,6 +1139,11 @@ static int syscall__set_arg_fmts(struct syscall *sc) ...@@ -1178,6 +1139,11 @@ static int syscall__set_arg_fmts(struct syscall *sc)
for (field = sc->args; field; field = field->next) { for (field = sc->args; field; field = field->next) {
if (sc->fmt && sc->fmt->arg_scnprintf[idx]) if (sc->fmt && sc->fmt->arg_scnprintf[idx])
sc->arg_scnprintf[idx] = sc->fmt->arg_scnprintf[idx]; sc->arg_scnprintf[idx] = sc->fmt->arg_scnprintf[idx];
else if (strcmp(field->type, "const char *") == 0 &&
(strcmp(field->name, "filename") == 0 ||
strcmp(field->name, "path") == 0 ||
strcmp(field->name, "pathname") == 0))
sc->arg_scnprintf[idx] = SCA_FILENAME;
else if (field->flags & FIELD_IS_POINTER) else if (field->flags & FIELD_IS_POINTER)
sc->arg_scnprintf[idx] = syscall_arg__scnprintf_hex; sc->arg_scnprintf[idx] = syscall_arg__scnprintf_hex;
else if (strcmp(field->type, "pid_t") == 0) else if (strcmp(field->type, "pid_t") == 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册