diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-trace.c | 36 |
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 | ||
19 | static size_t syscall_arg__scnprintf_hex(char *bf, size_t size, | 19 | static 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 | ||
27 | static size_t syscall_arg__scnprintf_whence(char *bf, size_t size, | 29 | static 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 | ||
52 | static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, | 56 | static 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 | ||
83 | static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size, | 89 | static 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 | ||
124 | static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size, | 131 | static 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 | ||
166 | static size_t syscall_arg__scnprintf_futex_op(char *bf, size_t size, unsigned long arg, u8 *arg_mask) | 174 | static 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 | ||
209 | static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size, | 218 | static 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, | |||
265 | static struct syscall_fmt { | 275 | static 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 | ||
338 | static size_t fprintf_duration(unsigned long t, FILE *fp) | 352 | static 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]); |