1 #include <sys/mman.h> 2 3 #ifndef PROT_SEM 4 #define PROT_SEM 0x8 5 #endif 6 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); 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 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); 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 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); 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 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); 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