aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
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]);