]>
Commit | Line | Data |
---|---|---|
277cf08f | 1 | #include <uapi/linux/mman.h> |
256763b0 | 2 | |
df4cb167 ACM |
3 | static 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); | |
df4cb167 | 19 | P_MMAP_PROT(SEM); |
df4cb167 ACM |
20 | 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 | ||
df4cb167 ACM |
32 | static 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 | ||
37 | #define P_MMAP_FLAG(n) \ | |
38 | if (flags & MAP_##n) { \ | |
39 | printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ | |
40 | flags &= ~MAP_##n; \ | |
41 | } | |
42 | ||
43 | P_MMAP_FLAG(SHARED); | |
44 | P_MMAP_FLAG(PRIVATE); | |
2bd42f3a | 45 | #ifdef MAP_32BIT |
df4cb167 | 46 | P_MMAP_FLAG(32BIT); |
2bd42f3a | 47 | #endif |
df4cb167 ACM |
48 | P_MMAP_FLAG(ANONYMOUS); |
49 | P_MMAP_FLAG(DENYWRITE); | |
50 | P_MMAP_FLAG(EXECUTABLE); | |
51 | P_MMAP_FLAG(FILE); | |
52 | P_MMAP_FLAG(FIXED); | |
53 | P_MMAP_FLAG(GROWSDOWN); | |
df4cb167 | 54 | P_MMAP_FLAG(HUGETLB); |
df4cb167 ACM |
55 | P_MMAP_FLAG(LOCKED); |
56 | P_MMAP_FLAG(NONBLOCK); | |
57 | P_MMAP_FLAG(NORESERVE); | |
58 | P_MMAP_FLAG(POPULATE); | |
59 | P_MMAP_FLAG(STACK); | |
df4cb167 | 60 | P_MMAP_FLAG(UNINITIALIZED); |
df4cb167 ACM |
61 | #undef P_MMAP_FLAG |
62 | ||
63 | if (flags) | |
64 | printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags); | |
65 | ||
66 | return printed; | |
67 | } | |
68 | ||
69 | #define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags | |
70 | ||
71 | static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size, | |
72 | struct syscall_arg *arg) | |
73 | { | |
74 | int printed = 0, flags = arg->val; | |
75 | ||
76 | #define P_MREMAP_FLAG(n) \ | |
77 | if (flags & MREMAP_##n) { \ | |
78 | printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ | |
79 | flags &= ~MREMAP_##n; \ | |
80 | } | |
81 | ||
82 | P_MREMAP_FLAG(MAYMOVE); | |
df4cb167 | 83 | P_MREMAP_FLAG(FIXED); |
df4cb167 ACM |
84 | #undef P_MREMAP_FLAG |
85 | ||
86 | if (flags) | |
87 | printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags); | |
88 | ||
89 | return printed; | |
90 | } | |
91 | ||
92 | #define SCA_MREMAP_FLAGS syscall_arg__scnprintf_mremap_flags | |
93 | ||
df4cb167 ACM |
94 | static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size, |
95 | struct syscall_arg *arg) | |
96 | { | |
97 | int behavior = arg->val; | |
98 | ||
99 | switch (behavior) { | |
100 | #define P_MADV_BHV(n) case MADV_##n: return scnprintf(bf, size, #n) | |
101 | P_MADV_BHV(NORMAL); | |
102 | P_MADV_BHV(RANDOM); | |
103 | P_MADV_BHV(SEQUENTIAL); | |
104 | P_MADV_BHV(WILLNEED); | |
105 | P_MADV_BHV(DONTNEED); | |
f752e90e | 106 | P_MADV_BHV(FREE); |
df4cb167 ACM |
107 | P_MADV_BHV(REMOVE); |
108 | P_MADV_BHV(DONTFORK); | |
109 | P_MADV_BHV(DOFORK); | |
110 | P_MADV_BHV(HWPOISON); | |
df4cb167 | 111 | P_MADV_BHV(SOFT_OFFLINE); |
df4cb167 ACM |
112 | P_MADV_BHV(MERGEABLE); |
113 | P_MADV_BHV(UNMERGEABLE); | |
df4cb167 | 114 | P_MADV_BHV(HUGEPAGE); |
df4cb167 | 115 | P_MADV_BHV(NOHUGEPAGE); |
df4cb167 | 116 | P_MADV_BHV(DONTDUMP); |
df4cb167 | 117 | P_MADV_BHV(DODUMP); |
256763b0 | 118 | #undef P_MADV_BHV |
df4cb167 ACM |
119 | default: break; |
120 | } | |
121 | ||
122 | return scnprintf(bf, size, "%#x", behavior); | |
123 | } | |
124 | ||
125 | #define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior |