Commit | Line | Data |
---|---|---|
df4cb167 ACM |
1 | #include <sys/mman.h> |
2 | ||
256763b0 ACM |
3 | #ifndef PROT_SEM |
4 | #define PROT_SEM 0x8 | |
5 | #endif | |
6 | ||
df4cb167 ACM |
7 | static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size, |
8 | struct syscall_arg *arg) | |
9 | { | |
10 | int printed = 0, prot = arg->val; | |
11 | ||
12 | if (prot == PROT_NONE) | |
13 | return scnprintf(bf, size, "NONE"); | |
14 | #define P_MMAP_PROT(n) \ | |
15 | if (prot & PROT_##n) { \ | |
16 | printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ | |
17 | prot &= ~PROT_##n; \ | |
18 | } | |
19 | ||
20 | P_MMAP_PROT(EXEC); | |
21 | P_MMAP_PROT(READ); | |
22 | P_MMAP_PROT(WRITE); | |
df4cb167 | 23 | P_MMAP_PROT(SEM); |
df4cb167 ACM |
24 | P_MMAP_PROT(GROWSDOWN); |
25 | P_MMAP_PROT(GROWSUP); | |
26 | #undef P_MMAP_PROT | |
27 | ||
28 | if (prot) | |
29 | printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", prot); | |
30 | ||
31 | return printed; | |
32 | } | |
33 | ||
34 | #define SCA_MMAP_PROT syscall_arg__scnprintf_mmap_prot | |
35 | ||
256763b0 ACM |
36 | #ifndef MAP_FIXED |
37 | #define MAP_FIXED 0x10 | |
38 | #endif | |
39 | ||
40 | #ifndef MAP_ANONYMOUS | |
41 | #define MAP_ANONYMOUS 0x20 | |
42 | #endif | |
43 | ||
44 | #ifndef MAP_32BIT | |
45 | #define MAP_32BIT 0x40 | |
46 | #endif | |
47 | ||
df4cb167 | 48 | #ifndef MAP_STACK |
256763b0 | 49 | #define MAP_STACK 0x20000 |
df4cb167 ACM |
50 | #endif |
51 | ||
256763b0 ACM |
52 | #ifndef MAP_HUGETLB |
53 | #define MAP_HUGETLB 0x40000 | |
54 | #endif | |
55 | ||
56 | #ifndef MAP_UNINITIALIZED | |
57 | #define MAP_UNINITIALIZED 0x4000000 | |
58 | #endif | |
59 | ||
60 | ||
df4cb167 ACM |
61 | static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size, |
62 | struct syscall_arg *arg) | |
63 | { | |
64 | int printed = 0, flags = arg->val; | |
65 | ||
66 | #define P_MMAP_FLAG(n) \ | |
67 | if (flags & MAP_##n) { \ | |
68 | printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ | |
69 | flags &= ~MAP_##n; \ | |
70 | } | |
71 | ||
72 | P_MMAP_FLAG(SHARED); | |
73 | P_MMAP_FLAG(PRIVATE); | |
df4cb167 | 74 | P_MMAP_FLAG(32BIT); |
df4cb167 ACM |
75 | P_MMAP_FLAG(ANONYMOUS); |
76 | P_MMAP_FLAG(DENYWRITE); | |
77 | P_MMAP_FLAG(EXECUTABLE); | |
78 | P_MMAP_FLAG(FILE); | |
79 | P_MMAP_FLAG(FIXED); | |
80 | P_MMAP_FLAG(GROWSDOWN); | |
df4cb167 | 81 | P_MMAP_FLAG(HUGETLB); |
df4cb167 ACM |
82 | P_MMAP_FLAG(LOCKED); |
83 | P_MMAP_FLAG(NONBLOCK); | |
84 | P_MMAP_FLAG(NORESERVE); | |
85 | P_MMAP_FLAG(POPULATE); | |
86 | P_MMAP_FLAG(STACK); | |
df4cb167 | 87 | P_MMAP_FLAG(UNINITIALIZED); |
df4cb167 ACM |
88 | #undef P_MMAP_FLAG |
89 | ||
90 | if (flags) | |
91 | printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags); | |
92 | ||
93 | return printed; | |
94 | } | |
95 | ||
96 | #define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags | |
97 | ||
256763b0 ACM |
98 | #ifndef MREMAP_MAYMOVE |
99 | #define MREMAP_MAYMOVE 1 | |
100 | #endif | |
101 | #ifndef MREMAP_FIXED | |
102 | #define MREMAP_FIXED 2 | |
103 | #endif | |
104 | ||
df4cb167 ACM |
105 | static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size, |
106 | struct syscall_arg *arg) | |
107 | { | |
108 | int printed = 0, flags = arg->val; | |
109 | ||
110 | #define P_MREMAP_FLAG(n) \ | |
111 | if (flags & MREMAP_##n) { \ | |
112 | printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ | |
113 | flags &= ~MREMAP_##n; \ | |
114 | } | |
115 | ||
116 | P_MREMAP_FLAG(MAYMOVE); | |
df4cb167 | 117 | P_MREMAP_FLAG(FIXED); |
df4cb167 ACM |
118 | #undef P_MREMAP_FLAG |
119 | ||
120 | if (flags) | |
121 | printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags); | |
122 | ||
123 | return printed; | |
124 | } | |
125 | ||
126 | #define SCA_MREMAP_FLAGS syscall_arg__scnprintf_mremap_flags | |
127 | ||
128 | #ifndef MADV_HWPOISON | |
129 | #define MADV_HWPOISON 100 | |
130 | #endif | |
131 | ||
256763b0 ACM |
132 | #ifndef MADV_SOFT_OFFLINE |
133 | #define MADV_SOFT_OFFLINE 101 | |
134 | #endif | |
135 | ||
df4cb167 ACM |
136 | #ifndef MADV_MERGEABLE |
137 | #define MADV_MERGEABLE 12 | |
138 | #endif | |
139 | ||
140 | #ifndef MADV_UNMERGEABLE | |
141 | #define MADV_UNMERGEABLE 13 | |
142 | #endif | |
143 | ||
256763b0 ACM |
144 | #ifndef MADV_HUGEPAGE |
145 | #define MADV_HUGEPAGE 14 | |
146 | #endif | |
147 | ||
148 | #ifndef MADV_NOHUGEPAGE | |
149 | #define MADV_NOHUGEPAGE 15 | |
150 | #endif | |
151 | ||
152 | #ifndef MADV_DONTDUMP | |
153 | #define MADV_DONTDUMP 16 | |
154 | #endif | |
155 | ||
156 | #ifndef MADV_DODUMP | |
157 | #define MADV_DODUMP 17 | |
158 | #endif | |
159 | ||
160 | ||
df4cb167 ACM |
161 | static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size, |
162 | struct syscall_arg *arg) | |
163 | { | |
164 | int behavior = arg->val; | |
165 | ||
166 | switch (behavior) { | |
167 | #define P_MADV_BHV(n) case MADV_##n: return scnprintf(bf, size, #n) | |
168 | P_MADV_BHV(NORMAL); | |
169 | P_MADV_BHV(RANDOM); | |
170 | P_MADV_BHV(SEQUENTIAL); | |
171 | P_MADV_BHV(WILLNEED); | |
172 | P_MADV_BHV(DONTNEED); | |
173 | P_MADV_BHV(REMOVE); | |
174 | P_MADV_BHV(DONTFORK); | |
175 | P_MADV_BHV(DOFORK); | |
176 | P_MADV_BHV(HWPOISON); | |
df4cb167 | 177 | P_MADV_BHV(SOFT_OFFLINE); |
df4cb167 ACM |
178 | P_MADV_BHV(MERGEABLE); |
179 | P_MADV_BHV(UNMERGEABLE); | |
df4cb167 | 180 | P_MADV_BHV(HUGEPAGE); |
df4cb167 | 181 | P_MADV_BHV(NOHUGEPAGE); |
df4cb167 | 182 | P_MADV_BHV(DONTDUMP); |
df4cb167 | 183 | P_MADV_BHV(DODUMP); |
256763b0 | 184 | #undef P_MADV_BHV |
df4cb167 ACM |
185 | default: break; |
186 | } | |
187 | ||
188 | return scnprintf(bf, size, "%#x", behavior); | |
189 | } | |
190 | ||
191 | #define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior |