aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-trace.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2015-08-13 03:23:53 -0400
committerIngo Molnar <mingo@kernel.org>2015-08-13 03:23:53 -0400
commita897b5f0393a8a05d230c9248dc5324fb30720a0 (patch)
tree8b0ed53246df201d073e8fd6dd47304994b15f5b /tools/perf/builtin-trace.c
parent5f1230c9b80b89f404938ff88dfa64a963f74f2c (diff)
parent71ef150ee06df29c5b427307dc0bacfe06a8baea (diff)
Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: User visible changes: - Allow selecting the type of callchains per event, including disabling callchains in all but one entry in an event list, to save space, and also to ask for the callchains collected in one event to be used in other events. (Kan Liang) - Beautify more syscall arguments in 'perf trace': (Arnaldo Carvalho de Melo) - A bunch more translate file/pathnames from pointers to strings. - Convert numbers to strings for the 'keyctl' syscall 'option' arg. - Add missing 'clockid' entries. - Fix 'perf probe -L sys_*' as it was not showing all the source code for syscall functions in the kernel. (Masami Hiramatsu) - Make ESC unzoom as well in the hists browser, i.e. in 'report' and 'top', as we're considering repurposing the right and left arrow keys to use in horizontal scrolling, i.e. leave just ESC to be used for what <- works now, and ENTER for what -> does (they are already aliases for ages). (Arnaldo Carvalho de Melo) Infrastructure fixes: - Check for SRCLINE_UNKNOWN case in "srcfile" processing (Andi Kleen) - Wrap the slsmg_{printf,write_nstring} slang functions behind ui_browser, so that we can make the ui_browser based browsers (annotate, menus, hists, etc) UI library agnostic and usable with multiple backends (slang now, GTK+ and others in the future, maybe) (Arnaldo Carvalho de Melo) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/builtin-trace.c')
-rw-r--r--tools/perf/builtin-trace.c54
1 files changed, 42 insertions, 12 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index a25048c85b76..489cc118a36a 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -569,6 +569,15 @@ static DEFINE_STRARRAY_OFFSET(epoll_ctl_ops, 1);
569static const char *itimers[] = { "REAL", "VIRTUAL", "PROF", }; 569static const char *itimers[] = { "REAL", "VIRTUAL", "PROF", };
570static DEFINE_STRARRAY(itimers); 570static DEFINE_STRARRAY(itimers);
571 571
572static const char *keyctl_options[] = {
573 "GET_KEYRING_ID", "JOIN_SESSION_KEYRING", "UPDATE", "REVOKE", "CHOWN",
574 "SETPERM", "DESCRIBE", "CLEAR", "LINK", "UNLINK", "SEARCH", "READ",
575 "INSTANTIATE", "NEGATE", "SET_REQKEY_KEYRING", "SET_TIMEOUT",
576 "ASSUME_AUTHORITY", "GET_SECURITY", "SESSION_TO_PARENT", "REJECT",
577 "INSTANTIATE_IOV", "INVALIDATE", "GET_PERSISTENT",
578};
579static DEFINE_STRARRAY(keyctl_options);
580
572static const char *whences[] = { "SET", "CUR", "END", 581static const char *whences[] = { "SET", "CUR", "END",
573#ifdef SEEK_DATA 582#ifdef SEEK_DATA
574"DATA", 583"DATA",
@@ -599,7 +608,8 @@ static DEFINE_STRARRAY(sighow);
599 608
600static const char *clockid[] = { 609static const char *clockid[] = {
601 "REALTIME", "MONOTONIC", "PROCESS_CPUTIME_ID", "THREAD_CPUTIME_ID", 610 "REALTIME", "MONOTONIC", "PROCESS_CPUTIME_ID", "THREAD_CPUTIME_ID",
602 "MONOTONIC_RAW", "REALTIME_COARSE", "MONOTONIC_COARSE", 611 "MONOTONIC_RAW", "REALTIME_COARSE", "MONOTONIC_COARSE", "BOOTTIME",
612 "REALTIME_ALARM", "BOOTTIME_ALARM", "SGI_CYCLE", "TAI"
603}; 613};
604static DEFINE_STRARRAY(clockid); 614static DEFINE_STRARRAY(clockid);
605 615
@@ -1014,7 +1024,8 @@ static struct syscall_fmt {
1014 { .name = "fchmod", .errmsg = true, 1024 { .name = "fchmod", .errmsg = true,
1015 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, }, 1025 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1016 { .name = "fchmodat", .errmsg = true, 1026 { .name = "fchmodat", .errmsg = true,
1017 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, }, 1027 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */
1028 [1] = SCA_FILENAME, /* filename */ }, },
1018 { .name = "fchown", .errmsg = true, 1029 { .name = "fchown", .errmsg = true,
1019 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, }, 1030 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1020 { .name = "fchownat", .errmsg = true, 1031 { .name = "fchownat", .errmsg = true,
@@ -1045,7 +1056,8 @@ static struct syscall_fmt {
1045 { .name = "futex", .errmsg = true, 1056 { .name = "futex", .errmsg = true,
1046 .arg_scnprintf = { [1] = SCA_FUTEX_OP, /* op */ }, }, 1057 .arg_scnprintf = { [1] = SCA_FUTEX_OP, /* op */ }, },
1047 { .name = "futimesat", .errmsg = true, 1058 { .name = "futimesat", .errmsg = true,
1048 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, }, 1059 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */
1060 [1] = SCA_FILENAME, /* filename */ }, },
1049 { .name = "getdents", .errmsg = true, 1061 { .name = "getdents", .errmsg = true,
1050 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, }, 1062 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1051 { .name = "getdents64", .errmsg = true, 1063 { .name = "getdents64", .errmsg = true,
@@ -1068,6 +1080,7 @@ static struct syscall_fmt {
1068#else 1080#else
1069 [2] = SCA_HEX, /* arg */ }, }, 1081 [2] = SCA_HEX, /* arg */ }, },
1070#endif 1082#endif
1083 { .name = "keyctl", .errmsg = true, STRARRAY(0, option, keyctl_options), },
1071 { .name = "kill", .errmsg = true, 1084 { .name = "kill", .errmsg = true,
1072 .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, 1085 .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, },
1073 { .name = "lchown", .errmsg = true, 1086 { .name = "lchown", .errmsg = true,
@@ -1078,13 +1091,18 @@ static struct syscall_fmt {
1078 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, }, 1091 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, },
1079 { .name = "listxattr", .errmsg = true, 1092 { .name = "listxattr", .errmsg = true,
1080 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, 1093 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1094 { .name = "llistxattr", .errmsg = true,
1095 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1096 { .name = "lremovexattr", .errmsg = true,
1097 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1081 { .name = "lseek", .errmsg = true, 1098 { .name = "lseek", .errmsg = true,
1082 .arg_scnprintf = { [0] = SCA_FD, /* fd */ 1099 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1083 [2] = SCA_STRARRAY, /* whence */ }, 1100 [2] = SCA_STRARRAY, /* whence */ },
1084 .arg_parm = { [2] = &strarray__whences, /* whence */ }, }, 1101 .arg_parm = { [2] = &strarray__whences, /* whence */ }, },
1085 { .name = "lsetxattr", .errmsg = true, 1102 { .name = "lsetxattr", .errmsg = true,
1086 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, 1103 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1087 { .name = "lstat", .errmsg = true, .alias = "newlstat", }, 1104 { .name = "lstat", .errmsg = true, .alias = "newlstat",
1105 .arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
1088 { .name = "lsxattr", .errmsg = true, 1106 { .name = "lsxattr", .errmsg = true,
1089 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, 1107 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1090 { .name = "madvise", .errmsg = true, 1108 { .name = "madvise", .errmsg = true,
@@ -1098,7 +1116,8 @@ static struct syscall_fmt {
1098 { .name = "mknod", .errmsg = true, 1116 { .name = "mknod", .errmsg = true,
1099 .arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, }, 1117 .arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
1100 { .name = "mknodat", .errmsg = true, 1118 { .name = "mknodat", .errmsg = true,
1101 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */ }, }, 1119 .arg_scnprintf = { [0] = SCA_FDAT, /* fd */
1120 [1] = SCA_FILENAME, /* filename */ }, },
1102 { .name = "mlock", .errmsg = true, 1121 { .name = "mlock", .errmsg = true,
1103 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 1122 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
1104 { .name = "mlockall", .errmsg = true, 1123 { .name = "mlockall", .errmsg = true,
@@ -1111,6 +1130,8 @@ static struct syscall_fmt {
1111 { .name = "mprotect", .errmsg = true, 1130 { .name = "mprotect", .errmsg = true,
1112 .arg_scnprintf = { [0] = SCA_HEX, /* start */ 1131 .arg_scnprintf = { [0] = SCA_HEX, /* start */
1113 [2] = SCA_MMAP_PROT, /* prot */ }, }, 1132 [2] = SCA_MMAP_PROT, /* prot */ }, },
1133 { .name = "mq_unlink", .errmsg = true,
1134 .arg_scnprintf = { [0] = SCA_FILENAME, /* u_name */ }, },
1114 { .name = "mremap", .hexret = true, 1135 { .name = "mremap", .hexret = true,
1115 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ 1136 .arg_scnprintf = { [0] = SCA_HEX, /* addr */
1116 [3] = SCA_MREMAP_FLAGS, /* flags */ 1137 [3] = SCA_MREMAP_FLAGS, /* flags */
@@ -1162,11 +1183,14 @@ static struct syscall_fmt {
1162 { .name = "readv", .errmsg = true, 1183 { .name = "readv", .errmsg = true,
1163 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, }, 1184 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1164 { .name = "recvfrom", .errmsg = true, 1185 { .name = "recvfrom", .errmsg = true,
1165 .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, 1186 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1187 [3] = SCA_MSG_FLAGS, /* flags */ }, },
1166 { .name = "recvmmsg", .errmsg = true, 1188 { .name = "recvmmsg", .errmsg = true,
1167 .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, 1189 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1190 [3] = SCA_MSG_FLAGS, /* flags */ }, },
1168 { .name = "recvmsg", .errmsg = true, 1191 { .name = "recvmsg", .errmsg = true,
1169 .arg_scnprintf = { [2] = SCA_MSG_FLAGS, /* flags */ }, }, 1192 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1193 [2] = SCA_MSG_FLAGS, /* flags */ }, },
1170 { .name = "removexattr", .errmsg = true, 1194 { .name = "removexattr", .errmsg = true,
1171 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, 1195 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1172 { .name = "renameat", .errmsg = true, 1196 { .name = "renameat", .errmsg = true,
@@ -1182,11 +1206,14 @@ static struct syscall_fmt {
1182 .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, }, 1206 .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, },
1183 { .name = "select", .errmsg = true, .timeout = true, }, 1207 { .name = "select", .errmsg = true, .timeout = true, },
1184 { .name = "sendmmsg", .errmsg = true, 1208 { .name = "sendmmsg", .errmsg = true,
1185 .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, 1209 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1210 [3] = SCA_MSG_FLAGS, /* flags */ }, },
1186 { .name = "sendmsg", .errmsg = true, 1211 { .name = "sendmsg", .errmsg = true,
1187 .arg_scnprintf = { [2] = SCA_MSG_FLAGS, /* flags */ }, }, 1212 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1213 [2] = SCA_MSG_FLAGS, /* flags */ }, },
1188 { .name = "sendto", .errmsg = true, 1214 { .name = "sendto", .errmsg = true,
1189 .arg_scnprintf = { [3] = SCA_MSG_FLAGS, /* flags */ }, }, 1215 .arg_scnprintf = { [0] = SCA_FD, /* fd */
1216 [3] = SCA_MSG_FLAGS, /* flags */ }, },
1190 { .name = "setitimer", .errmsg = true, STRARRAY(0, which, itimers), }, 1217 { .name = "setitimer", .errmsg = true, STRARRAY(0, which, itimers), },
1191 { .name = "setrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), }, 1218 { .name = "setrlimit", .errmsg = true, STRARRAY(0, resource, rlimit_resources), },
1192 { .name = "setxattr", .errmsg = true, 1219 { .name = "setxattr", .errmsg = true,
@@ -1201,7 +1228,8 @@ static struct syscall_fmt {
1201 .arg_scnprintf = { [0] = SCA_STRARRAY, /* family */ 1228 .arg_scnprintf = { [0] = SCA_STRARRAY, /* family */
1202 [1] = SCA_SK_TYPE, /* type */ }, 1229 [1] = SCA_SK_TYPE, /* type */ },
1203 .arg_parm = { [0] = &strarray__socket_families, /* family */ }, }, 1230 .arg_parm = { [0] = &strarray__socket_families, /* family */ }, },
1204 { .name = "stat", .errmsg = true, .alias = "newstat", }, 1231 { .name = "stat", .errmsg = true, .alias = "newstat",
1232 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1205 { .name = "statfs", .errmsg = true, 1233 { .name = "statfs", .errmsg = true,
1206 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, }, 1234 .arg_scnprintf = { [0] = SCA_FILENAME, /* pathname */ }, },
1207 { .name = "swapoff", .errmsg = true, 1235 { .name = "swapoff", .errmsg = true,
@@ -1227,6 +1255,8 @@ static struct syscall_fmt {
1227 [1] = SCA_FILENAME, /* filename */ }, }, 1255 [1] = SCA_FILENAME, /* filename */ }, },
1228 { .name = "utimes", .errmsg = true, 1256 { .name = "utimes", .errmsg = true,
1229 .arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, }, 1257 .arg_scnprintf = { [0] = SCA_FILENAME, /* filename */ }, },
1258 { .name = "vmsplice", .errmsg = true,
1259 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1230 { .name = "write", .errmsg = true, 1260 { .name = "write", .errmsg = true,
1231 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, }, 1261 .arg_scnprintf = { [0] = SCA_FD, /* fd */ }, },
1232 { .name = "writev", .errmsg = true, 1262 { .name = "writev", .errmsg = true,