]> git.ipfire.org Git - thirdparty/linux.git/blame - tools/perf/trace/beauty/mmap.c
Merge tag 'block-5.7-2020-05-16' of git://git.kernel.dk/linux-block
[thirdparty/linux.git] / tools / perf / trace / beauty / mmap.c
CommitLineData
794f594e 1// SPDX-License-Identifier: LGPL-2.1
277cf08f 2#include <uapi/linux/mman.h>
2f967f1d 3#include <linux/log2.h>
256763b0 4
df4cb167
ACM
5static size_t syscall_arg__scnprintf_mmap_prot(char *bf, size_t size,
6 struct syscall_arg *arg)
7{
c65c83ff 8 const char *prot_prefix = "PROT_";
df4cb167 9 int printed = 0, prot = arg->val;
c65c83ff 10 bool show_prefix = arg->show_string_prefix;
df4cb167
ACM
11
12 if (prot == PROT_NONE)
c65c83ff 13 return scnprintf(bf, size, "%sNONE", show_prefix ? prot_prefix : "");
df4cb167
ACM
14#define P_MMAP_PROT(n) \
15 if (prot & PROT_##n) { \
c65c83ff 16 printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prot_prefix :"", #n); \
df4cb167
ACM
17 prot &= ~PROT_##n; \
18 }
19
df4cb167
ACM
20 P_MMAP_PROT(READ);
21 P_MMAP_PROT(WRITE);
5ce29d52 22 P_MMAP_PROT(EXEC);
df4cb167 23 P_MMAP_PROT(SEM);
df4cb167
ACM
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
2f967f1d 36#include "trace/beauty/generated/mmap_flags_array.c"
2e3d7fac 37 static DEFINE_STRARRAY(mmap_flags, "MAP_");
2f967f1d 38
f77526be
ACM
39static size_t mmap__scnprintf_flags(unsigned long flags, char *bf, size_t size, bool show_prefix)
40{
c65c83ff 41 return strarray__scnprintf_flags(&strarray__mmap_flags, bf, size, show_prefix, flags);
2f967f1d
ACM
42}
43
df4cb167
ACM
44static size_t syscall_arg__scnprintf_mmap_flags(char *bf, size_t size,
45 struct syscall_arg *arg)
46{
2f967f1d 47 unsigned long flags = arg->val;
df4cb167 48
d57da8c9
ACM
49 if (flags & MAP_ANONYMOUS)
50 arg->mask |= (1 << 4) | (1 << 5); /* Mask 4th ('fd') and 5th ('offset') args, ignored */
51
c65c83ff 52 return mmap__scnprintf_flags(flags, bf, size, arg->show_string_prefix);
df4cb167
ACM
53}
54
55#define SCA_MMAP_FLAGS syscall_arg__scnprintf_mmap_flags
56
57static size_t syscall_arg__scnprintf_mremap_flags(char *bf, size_t size,
58 struct syscall_arg *arg)
59{
c65c83ff
ACM
60 const char *flags_prefix = "MREMAP_";
61 bool show_prefix = arg->show_string_prefix;
df4cb167
ACM
62 int printed = 0, flags = arg->val;
63
64#define P_MREMAP_FLAG(n) \
65 if (flags & MREMAP_##n) { \
c65c83ff 66 printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? flags_prefix : "", #n); \
df4cb167
ACM
67 flags &= ~MREMAP_##n; \
68 }
69
70 P_MREMAP_FLAG(MAYMOVE);
df4cb167 71 P_MREMAP_FLAG(FIXED);
f60b3878 72 P_MREMAP_FLAG(DONTUNMAP);
df4cb167
ACM
73#undef P_MREMAP_FLAG
74
75 if (flags)
76 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
77
78 return printed;
79}
80
81#define SCA_MREMAP_FLAGS syscall_arg__scnprintf_mremap_flags
82
5a54c2f5
ACM
83static size_t madvise__scnprintf_behavior(int behavior, char *bf, size_t size)
84{
85#include "trace/beauty/generated/madvise_behavior_array.c"
2e3d7fac 86 static DEFINE_STRARRAY(madvise_advices, "MADV_");
5a54c2f5
ACM
87
88 if (behavior < strarray__madvise_advices.nr_entries && strarray__madvise_advices.entries[behavior] != NULL)
89 return scnprintf(bf, size, "MADV_%s", strarray__madvise_advices.entries[behavior]);
90
91 return scnprintf(bf, size, "%#", behavior);
92}
93
df4cb167
ACM
94static size_t syscall_arg__scnprintf_madvise_behavior(char *bf, size_t size,
95 struct syscall_arg *arg)
96{
5a54c2f5 97 return madvise__scnprintf_behavior(arg->val, bf, size);
df4cb167
ACM
98}
99
100#define SCA_MADV_BHV syscall_arg__scnprintf_madvise_behavior