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