1#include <sys/mman.h> 2 3#ifndef PROT_SEM 4#define PROT_SEM 0x8 5#endif 6 7static 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); 23 P_MMAP_PROT(SEM); 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 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 48#ifndef MAP_STACK 49#define MAP_STACK 0x20000 50#endif 51 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 61static 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); 74 P_MMAP_FLAG(32BIT); 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); 81 P_MMAP_FLAG(HUGETLB); 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); 87 P_MMAP_FLAG(UNINITIALIZED); 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 98#ifndef MREMAP_MAYMOVE 99#define MREMAP_MAYMOVE 1 100#endif 101#ifndef MREMAP_FIXED 102#define MREMAP_FIXED 2 103#endif 104 105static 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); 117 P_MREMAP_FLAG(FIXED); 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 132#ifndef MADV_SOFT_OFFLINE 133#define MADV_SOFT_OFFLINE 101 134#endif 135 136#ifndef MADV_MERGEABLE 137#define MADV_MERGEABLE 12 138#endif 139 140#ifndef MADV_UNMERGEABLE 141#define MADV_UNMERGEABLE 13 142#endif 143 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 161static 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); 177 P_MADV_BHV(SOFT_OFFLINE); 178 P_MADV_BHV(MERGEABLE); 179 P_MADV_BHV(UNMERGEABLE); 180 P_MADV_BHV(HUGEPAGE); 181 P_MADV_BHV(NOHUGEPAGE); 182 P_MADV_BHV(DONTDUMP); 183 P_MADV_BHV(DODUMP); 184#undef P_MADV_BHV 185 default: break; 186 } 187 188 return scnprintf(bf, size, "%#x", behavior); 189} 190 191#define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior 192