aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf')
-rw-r--r--tools/perf/builtin-trace.c41
1 files changed, 38 insertions, 3 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 60ee811c5129..81c20a6cc6b7 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -11,6 +11,7 @@
11 11
12#include <libaudit.h> 12#include <libaudit.h>
13#include <stdlib.h> 13#include <stdlib.h>
14#include <sys/mman.h>
14 15
15static size_t syscall_arg__scnprintf_hex(char *bf, size_t size, unsigned long arg) 16static size_t syscall_arg__scnprintf_hex(char *bf, size_t size, unsigned long arg)
16{ 17{
@@ -19,6 +20,36 @@ static size_t syscall_arg__scnprintf_hex(char *bf, size_t size, unsigned long ar
19 20
20#define SCA_HEX syscall_arg__scnprintf_hex 21#define SCA_HEX syscall_arg__scnprintf_hex
21 22
23static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, unsigned long arg)
24{
25 int printed = 0, prot = arg;
26
27 if (prot == PROT_NONE)
28 return scnprintf(bf, size, "NONE");
29#define P_MMAP_PROT(n) \
30 if (prot & PROT_##n) { \
31 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
32 prot &= ~PROT_##n; \
33 }
34
35 P_MMAP_PROT(EXEC);
36 P_MMAP_PROT(READ);
37 P_MMAP_PROT(WRITE);
38#ifdef PROT_SEM
39 P_MMAP_PROT(SEM);
40#endif
41 P_MMAP_PROT(GROWSDOWN);
42 P_MMAP_PROT(GROWSUP);
43#undef P_MMAP_PROT
44
45 if (prot)
46 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", prot);
47
48 return printed;
49}
50
51#define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot
52
22static struct syscall_fmt { 53static struct syscall_fmt {
23 const char *name; 54 const char *name;
24 const char *alias; 55 const char *alias;
@@ -40,10 +71,14 @@ static struct syscall_fmt {
40 .arg_scnprintf = { [2] = SCA_HEX, /* arg */ }, }, 71 .arg_scnprintf = { [2] = SCA_HEX, /* arg */ }, },
41 { .name = "lstat", .errmsg = true, .alias = "newlstat", }, 72 { .name = "lstat", .errmsg = true, .alias = "newlstat", },
42 { .name = "mmap", .hexret = true, 73 { .name = "mmap", .hexret = true,
43 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 74 .arg_scnprintf = { [0] = SCA_HEX, /* addr */
75 [2] = SCA_MMAP_PROT, /* prot */ }, },
44 { .name = "mprotect", .errmsg = true, 76 { .name = "mprotect", .errmsg = true,
45 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 77 .arg_scnprintf = { [0] = SCA_HEX, /* start */
46 { .name = "mremap", .hexret = true, }, 78 [2] = SCA_MMAP_PROT, /* prot */ }, },
79 { .name = "mremap", .hexret = true,
80 .arg_scnprintf = { [0] = SCA_HEX, /* addr */
81 [4] = SCA_HEX, /* new_addr */ }, },
47 { .name = "munmap", .errmsg = true, 82 { .name = "munmap", .errmsg = true,
48 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, }, 83 .arg_scnprintf = { [0] = SCA_HEX, /* addr */ }, },
49 { .name = "open", .errmsg = true, }, 84 { .name = "open", .errmsg = true, },