aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2013-09-02 15:40:40 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2013-09-02 15:40:40 -0400
commit31cd3855c98119cae287b761d8d2e75018714c5d (patch)
treedf2ef6df950e698f14dde31f740101e7d80a9781 /tools
parentbe65a89a0b558cb5b6863be71861f29b36feb88e (diff)
perf trace: Tell arg formatters the arg index
... so that it can mask args relative to its position, like the 'mode' arg that may or not be printed according to the 'flags' (O_CREAT) value. [root@zoo ~]# perf trace -a -e openat,open_by_handle_at | head -1 469.754 ( 0.034 ms): 1183 openat(dfd: -100, filename: 0x7fbde40014b0, flags: CLOEXEC|DIRECTORY|NONBLOCK) = 23 [root@zoo ~]# Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-bgokqpkufd4sio7ixxknf1ux@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/perf/builtin-trace.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 5b6b2871d85f..b6f0725068bd 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -17,7 +17,9 @@
17#include <linux/futex.h> 17#include <linux/futex.h>
18 18
19static size_t syscall_arg__scnprintf_hex(char *bf, size_t size, 19static size_t syscall_arg__scnprintf_hex(char *bf, size_t size,
20 unsigned long arg, u8 *arg_mask __maybe_unused) 20 unsigned long arg,
21 u8 arg_idx __maybe_unused,
22 u8 *arg_mask __maybe_unused)
21{ 23{
22 return scnprintf(bf, size, "%#lx", arg); 24 return scnprintf(bf, size, "%#lx", arg);
23} 25}
@@ -25,7 +27,9 @@ static size_t syscall_arg__scnprintf_hex(char *bf, size_t size,
25#define SCA_HEX syscall_arg__scnprintf_hex 27#define SCA_HEX syscall_arg__scnprintf_hex
26 28
27static size_t syscall_arg__scnprintf_whence(char *bf, size_t size, 29static size_t syscall_arg__scnprintf_whence(char *bf, size_t size,
28 unsigned long arg, u8 *arg_mask __maybe_unused) 30 unsigned long arg,
31 u8 arg_idx __maybe_unused,
32 u8 *arg_mask __maybe_unused)
29{ 33{
30 int whence = arg; 34 int whence = arg;
31 35
@@ -50,7 +54,9 @@ static size_t syscall_arg__scnprintf_whence(char *bf, size_t size,
50#define SCA_WHENCE syscall_arg__scnprintf_whence 54#define SCA_WHENCE syscall_arg__scnprintf_whence
51 55
52static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, 56static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
53 unsigned long arg, u8 *arg_mask __maybe_unused) 57 unsigned long arg,
58 u8 arg_idx __maybe_unused,
59 u8 *arg_mask __maybe_unused)
54{ 60{
55 int printed = 0, prot = arg; 61 int printed = 0, prot = arg;
56 62
@@ -81,7 +87,8 @@ static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
81#define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot 87#define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot
82 88
83static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size, 89static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
84 unsigned long arg, u8 *arg_mask __maybe_unused) 90 unsigned long arg, u8 arg_idx __maybe_unused,
91 u8 *arg_mask __maybe_unused)
85{ 92{
86 int printed = 0, flags = arg; 93 int printed = 0, flags = arg;
87 94
@@ -122,7 +129,8 @@ static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
122#define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags 129#define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags
123 130
124static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size, 131static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size,
125 unsigned long arg, u8 *arg_mask __maybe_unused) 132 unsigned long arg, u8 arg_idx __maybe_unused,
133 u8 *arg_mask __maybe_unused)
126{ 134{
127 int behavior = arg; 135 int behavior = arg;
128 136
@@ -163,7 +171,8 @@ static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size,
163 171
164#define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior 172#define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior
165 173
166static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, unsigned long arg, u8 *arg_mask) 174static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, unsigned long arg,
175 u8 arg_idx __maybe_unused, u8 *arg_mask)
167{ 176{
168 enum syscall_futex_args { 177 enum syscall_futex_args {
169 SCF_UADDR = (1 << 0), 178 SCF_UADDR = (1 << 0),
@@ -207,12 +216,13 @@ static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, unsigned lo
207#define SCA_FUTEX_OP syscall_arg__scnprintf_futex_op 216#define SCA_FUTEX_OP syscall_arg__scnprintf_futex_op
208 217
209static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, 218static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size,
210 unsigned long arg, u8 *arg_mask) 219 unsigned long arg,
220 u8 arg_idx, u8 *arg_mask)
211{ 221{
212 int printed = 0, flags = arg; 222 int printed = 0, flags = arg;
213 223
214 if (!(flags & O_CREAT)) 224 if (!(flags & O_CREAT))
215 *arg_mask |= 1 << 2; /* Mask the mode parm */ 225 *arg_mask |= 1 << (arg_idx + 1); /* Mask the mode parm */
216 226
217 if (flags == 0) 227 if (flags == 0)
218 return scnprintf(bf, size, "RDONLY"); 228 return scnprintf(bf, size, "RDONLY");
@@ -265,7 +275,7 @@ static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size,
265static struct syscall_fmt { 275static struct syscall_fmt {
266 const char *name; 276 const char *name;
267 const char *alias; 277 const char *alias;
268 size_t (*arg_scnprintf[6])(char *bf, size_t size, unsigned long arg, u8 *arg_mask); 278 size_t (*arg_scnprintf[6])(char *bf, size_t size, unsigned long arg, u8 arg_idx, u8 *arg_mask);
269 bool errmsg; 279 bool errmsg;
270 bool timeout; 280 bool timeout;
271 bool hexret; 281 bool hexret;
@@ -302,6 +312,10 @@ static struct syscall_fmt {
302 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 312 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
303 { .name = "open", .errmsg = true, 313 { .name = "open", .errmsg = true,
304 .arg_scnprintf = { [1] = SCA_OPEN_FLAGS, /* flags */ }, }, 314 .arg_scnprintf = { [1] = SCA_OPEN_FLAGS, /* flags */ }, },
315 { .name = "open_by_handle_at", .errmsg = true,
316 .arg_scnprintf = { [2] = SCA_OPEN_FLAGS, /* flags */ }, },
317 { .name = "openat", .errmsg = true,
318 .arg_scnprintf = { [2] = SCA_OPEN_FLAGS, /* flags */ }, },
305 { .name = "poll", .errmsg = true, .timeout = true, }, 319 { .name = "poll", .errmsg = true, .timeout = true, },
306 { .name = "ppoll", .errmsg = true, .timeout = true, }, 320 { .name = "ppoll", .errmsg = true, .timeout = true, },
307 { .name = "pread", .errmsg = true, .alias = "pread64", }, 321 { .name = "pread", .errmsg = true, .alias = "pread64", },
@@ -332,7 +346,7 @@ struct syscall {
332 bool filtered; 346 bool filtered;
333 struct syscall_fmt *fmt; 347 struct syscall_fmt *fmt;
334 size_t (**arg_scnprintf)(char *bf, size_t size, 348 size_t (**arg_scnprintf)(char *bf, size_t size,
335 unsigned long arg, u8 *args_mask); 349 unsigned long arg, u8 arg_idx, u8 *args_mask);
336}; 350};
337 351
338static size_t fprintf_duration(unsigned long t, FILE *fp) 352static size_t fprintf_duration(unsigned long t, FILE *fp)
@@ -589,7 +603,7 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size,
589 603
590 if (sc->arg_scnprintf && sc->arg_scnprintf[i]) { 604 if (sc->arg_scnprintf && sc->arg_scnprintf[i]) {
591 printed += sc->arg_scnprintf[i](bf + printed, size - printed, 605 printed += sc->arg_scnprintf[i](bf + printed, size - printed,
592 args[i], &mask); 606 args[i], i, &mask);
593 } else { 607 } else {
594 printed += scnprintf(bf + printed, size - printed, 608 printed += scnprintf(bf + printed, size - printed,
595 "%ld", args[i]); 609 "%ld", args[i]);