blob: 45b1e0c0018fe78ab2792c21bed6a94f9346c5bd [file] [log] [blame]
Arnaldo Carvalho de Melo277cf082016-09-12 16:27:32 -03001#include <uapi/linux/mman.h>
Arnaldo Carvalho de Melo256763b2016-07-05 14:43:27 -03002
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -03003static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
4 struct syscall_arg *arg)
5{
6 int printed = 0, prot = arg->val;
7
8 if (prot == PROT_NONE)
9 return scnprintf(bf, size, "NONE");
10#define P_MMAP_PROT(n) \
11 if (prot & PROT_##n) { \
12 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
13 prot &= ~PROT_##n; \
14 }
15
16 P_MMAP_PROT(EXEC);
17 P_MMAP_PROT(READ);
18 P_MMAP_PROT(WRITE);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030019 P_MMAP_PROT(SEM);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030020 P_MMAP_PROT(GROWSDOWN);
21 P_MMAP_PROT(GROWSUP);
22#undef P_MMAP_PROT
23
24 if (prot)
25 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", prot);
26
27 return printed;
28}
29
30#define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot
31
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030032static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
33 struct syscall_arg *arg)
34{
35 int printed = 0, flags = arg->val;
36
Arnaldo Carvalho de Melod57da8c2017-07-19 12:16:15 -030037 if (flags & MAP_ANONYMOUS)
38 arg->mask |= (1 << 4) | (1 << 5); /* Mask 4th ('fd') and 5th ('offset') args, ignored */
39
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030040#define P_MMAP_FLAG(n) \
41 if (flags & MAP_##n) { \
42 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
43 flags &= ~MAP_##n; \
44 }
45
46 P_MMAP_FLAG(SHARED);
47 P_MMAP_FLAG(PRIVATE);
Jiri Olsa2bd42f32016-12-15 20:56:54 +010048#ifdef MAP_32BIT
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030049 P_MMAP_FLAG(32BIT);
Jiri Olsa2bd42f32016-12-15 20:56:54 +010050#endif
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030051 P_MMAP_FLAG(ANONYMOUS);
52 P_MMAP_FLAG(DENYWRITE);
53 P_MMAP_FLAG(EXECUTABLE);
54 P_MMAP_FLAG(FILE);
55 P_MMAP_FLAG(FIXED);
56 P_MMAP_FLAG(GROWSDOWN);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030057 P_MMAP_FLAG(HUGETLB);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030058 P_MMAP_FLAG(LOCKED);
59 P_MMAP_FLAG(NONBLOCK);
60 P_MMAP_FLAG(NORESERVE);
61 P_MMAP_FLAG(POPULATE);
62 P_MMAP_FLAG(STACK);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030063 P_MMAP_FLAG(UNINITIALIZED);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030064#undef P_MMAP_FLAG
65
66 if (flags)
67 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
68
69 return printed;
70}
71
72#define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags
73
74static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size,
75 struct syscall_arg *arg)
76{
77 int printed = 0, flags = arg->val;
78
79#define P_MREMAP_FLAG(n) \
80 if (flags & MREMAP_##n) { \
81 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
82 flags &= ~MREMAP_##n; \
83 }
84
85 P_MREMAP_FLAG(MAYMOVE);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030086 P_MREMAP_FLAG(FIXED);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -030087#undef P_MREMAP_FLAG
88
89 if (flags)
90 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
91
92 return printed;
93}
94
95#define SCA_MREMAP_FLAGS syscall_arg__scnprintf_mremap_flags
96
Arnaldo Carvalho de Melo5a54c2f2017-09-20 12:30:36 -030097static size_t madvise__scnprintf_behavior(int behavior, char *bf, size_t size)
98{
99#include "trace/beauty/generated/madvise_behavior_array.c"
100 static DEFINE_STRARRAY(madvise_advices);
101
102 if (behavior < strarray__madvise_advices.nr_entries && strarray__madvise_advices.entries[behavior] != NULL)
103 return scnprintf(bf, size, "MADV_%s", strarray__madvise_advices.entries[behavior]);
104
105 return scnprintf(bf, size, "%#", behavior);
106}
107
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -0300108static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size,
109 struct syscall_arg *arg)
110{
Arnaldo Carvalho de Melo5a54c2f2017-09-20 12:30:36 -0300111 return madvise__scnprintf_behavior(arg->val, bf, size);
Arnaldo Carvalho de Melodf4cb162016-04-13 12:05:44 -0300112}
113
114#define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior