linux/tools/perf/trace/beauty/mmap.c
<<
>>
Prefs
   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