1 /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) */
3 #ifndef CREATE_SYSCALL_TABLE
5 #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM
8 * The `flags` argument of the mmap syscall is split in two parts:
9 * - The type of mapping is described by the four least significant bits of the 4
11 * - The options on the mapping are described by the remaining 28 most
14 #define MAPPING_TYPE_RESERVED_BITS 4
15 #define LTTNG_MMAP_FLAGS_TO_CTF(x) ((x) >> MAPPING_TYPE_RESERVED_BITS)
18 * Enumeration of the mmap flags, as described in the 'mmap'
19 * system call man page.
21 SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_protection
,
23 ctf_enum_value("PROT_EXEC", PROT_EXEC
)
24 ctf_enum_value("PROT_READ", PROT_READ
)
25 ctf_enum_value("PROT_WRITE", PROT_WRITE
)
26 ctf_enum_value("PROT_NONE", PROT_NONE
)
30 SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_flags_mapping_type
,
32 ctf_enum_value("MAP_SHARED", MAP_SHARED
)
33 ctf_enum_value("MAP_PRIVATE", MAP_PRIVATE
)
34 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
35 ctf_enum_value("MAP_SHARED_VALIDATE", MAP_SHARED_VALIDATE
)
36 #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */
41 * Shift the values of the options so we can read them from the `flags` integer
44 SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_flags_options
,
46 ctf_enum_value("<none>", 0)
48 #if defined (MAP_32BIT) && MAP_32BIT != 0
49 ctf_enum_value("MAP_32BIT", LTTNG_MMAP_FLAGS_TO_CTF(MAP_32BIT
))
50 #endif /* defined (MAP_32BIT) && MAP_32BIT != 0 */
52 ctf_enum_value("MAP_ANONYMOUS", LTTNG_MMAP_FLAGS_TO_CTF(MAP_ANONYMOUS
))
53 ctf_enum_value("MAP_DENYWRITE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_DENYWRITE
))
54 ctf_enum_value("MAP_EXECUTABLE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_EXECUTABLE
))
55 ctf_enum_value("MAP_FIXED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_FIXED
))
57 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,17,0))
58 ctf_enum_value("MAP_FIXED_NOREPLACE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_FIXED_NOREPLACE
))
59 #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,17,0)) */
61 ctf_enum_value("MAP_GROWSDOWN", LTTNG_MMAP_FLAGS_TO_CTF(MAP_GROWSDOWN
))
62 ctf_enum_value("MAP_HUGETLB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGETLB
))
64 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0))
66 #if defined (MAP_HUGE_2MB) && MAP_HUGE_2MB != 0
67 ctf_enum_value("MAP_HUGE_2MB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGE_2MB
))
68 #endif /* defined (MAP_HUGE_2MB) && MAP_HUGE_2MB != 0 */
70 #if defined (MAP_HUGE_1GB) && MAP_HUGE_1GB != 0
71 ctf_enum_value("MAP_HUGE_1GB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGE_1GB
))
72 #endif /* defined (MAP_HUGE_1GB) && MAP_HUGE_1GB != 0 */
74 #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0)) */
76 ctf_enum_value("MAP_LOCKED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_LOCKED
))
77 ctf_enum_value("MAP_NONBLOCK", LTTNG_MMAP_FLAGS_TO_CTF(MAP_NONBLOCK
))
78 ctf_enum_value("MAP_NORESERVE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_NORESERVE
))
79 ctf_enum_value("MAP_POPULATE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_POPULATE
))
80 ctf_enum_value("MAP_STACK", LTTNG_MMAP_FLAGS_TO_CTF(MAP_STACK
))
82 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0))
83 ctf_enum_value("MAP_SYNC", LTTNG_MMAP_FLAGS_TO_CTF(MAP_SYNC
))
84 #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */
86 #if defined (MAP_UNINITIALIZED) && MAP_UNINITIALIZED != 0
87 ctf_enum_value("MAP_UNINITIALIZED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_UNINITIALIZED
))
88 #endif /* defined (MAP_UNINITIALIZED) && MAP_UNINITIALIZED != 0 */
92 #define LTTNG_MMAP_FLAGS_TYPE \
93 lttng_kernel_static_event_field("type", \
94 lttng_kernel_static_type_enum(&__enum_lttng_mmap_flags_mapping_type, \
95 lttng_kernel_static_type_integer(4, 1, 0, __BYTE_ORDER, 16)), \
98 #define LTTNG_MMAP_FLAGS_OPTIONS \
99 lttng_kernel_static_event_field("options", \
100 lttng_kernel_static_type_enum(&__enum_lttng_mmap_flags_options, \
101 lttng_kernel_static_type_integer(28, 1, 0, __BYTE_ORDER, 16)), \
104 #if (__BYTE_ORDER == __LITTLE_ENDIAN)
105 #define LTTNG_MMAP_FLAGS \
106 lttng_kernel_static_event_field_array( \
107 [0] = LTTNG_MMAP_FLAGS_TYPE, \
108 [1] = LTTNG_MMAP_FLAGS_OPTIONS, \
111 #define LTTNG_MMAP_FLAGS \
112 lttng_kernel_static_event_field_array( \
113 [0] = LTTNG_MMAP_FLAGS_OPTIONS, \
114 [1] = LTTNG_MMAP_FLAGS_TYPE, \
118 #endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */
120 #define OVERRIDE_32_mmap
121 #define OVERRIDE_64_mmap
122 SC_LTTNG_TRACEPOINT_EVENT(mmap
,
123 TP_PROTO(sc_exit(unsigned long ret
,)
124 unsigned long addr
, unsigned long len
,
125 unsigned long prot
, unsigned long flags
,
126 unsigned long fd
, unsigned long off
),
127 TP_ARGS(sc_exit(ret
,) addr
, len
, prot
, flags
, fd
, off
),
128 TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret
, ret
))
129 sc_in(ctf_integer_hex(unsigned long, addr
, addr
))
130 sc_in(ctf_integer(size_t, len
, len
))
131 #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM
133 * Use a custom field here so that tracer writes a single
134 * integer and the work of splitting it up in two fields is
135 * left to the trace reader.
137 sc_in(ctf_enum(lttng_mmap_protection
, int, prot
, prot
))
141 lttng_kernel_static_type_struct(2, LTTNG_MMAP_FLAGS
, lttng_alignof(uint32_t) * CHAR_BIT
)
145 ctf_integer_type(uint32_t, flags
)
150 sc_in(ctf_integer(int, prot
, prot
))
151 sc_in(ctf_integer(int, flags
, flags
))
152 #endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */
153 sc_in(ctf_integer(int, fd
, fd
))
154 sc_in(ctf_integer(off_t
, offset
, off
))
158 #ifdef CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM
160 * Enumeration of the open flags, as described in the 'open'
161 * system call man page.
163 SC_LTTNG_TRACEPOINT_ENUM(lttng_fcntl_cmd_flags
,
165 ctf_enum_value("F_DUPFD", F_DUPFD
)
166 ctf_enum_value("F_GETFD", F_GETFD
)
167 ctf_enum_value("F_SETFD", F_SETFD
)
168 ctf_enum_value("F_GETFL", F_GETFL
)
169 ctf_enum_value("F_SETFL", F_SETFL
)
170 ctf_enum_value("F_GETLK", F_GETLK
)
171 ctf_enum_value("F_SETLK", F_SETLK
)
172 ctf_enum_value("F_SETLKW", F_SETLKW
)
173 ctf_enum_value("F_SETOWN", F_SETOWN
)
174 ctf_enum_value("F_GETOWN", F_GETOWN
)
175 ctf_enum_value("F_SETSIG", F_SETSIG
)
176 ctf_enum_value("F_GETSIG", F_GETSIG
)
177 #if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT)
178 ctf_enum_value("F_GETLK64", F_GETLK64
)
179 ctf_enum_value("F_SETLK64", F_SETLK64
)
180 ctf_enum_value("F_SETLKW64", F_SETLKW64
)
181 #endif /* #if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT) */
182 ctf_enum_value("F_SETOWN_EX", F_SETOWN_EX
)
183 ctf_enum_value("F_GETOWN_EX", F_GETOWN_EX
)
184 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0))
185 ctf_enum_value("F_GETOWNER_UIDS", F_GETOWNER_UIDS
)
186 #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0)) */
187 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,15,0))
188 ctf_enum_value("F_OFD_GETLK", F_OFD_GETLK
)
189 ctf_enum_value("F_OFD_SETLK", F_OFD_SETLK
)
190 ctf_enum_value("F_OFD_SETLKW", F_OFD_SETLKW
)
191 #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,15,0)) */
192 ctf_enum_value("F_SETLEASE", F_SETLEASE
)
193 ctf_enum_value("F_GETLEASE", F_GETLEASE
)
194 ctf_enum_value("F_NOTIFY", F_NOTIFY
)
195 ctf_enum_value("F_CANCELLK", F_CANCELLK
)
196 ctf_enum_value("F_DUPFD_CLOEXEC", F_DUPFD_CLOEXEC
)
197 ctf_enum_value("F_SETPIPE_SZ", F_SETPIPE_SZ
)
198 ctf_enum_value("F_GETPIPE_SZ", F_GETPIPE_SZ
)
199 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,17,0))
200 ctf_enum_value("F_ADD_SEALS", F_ADD_SEALS
)
201 ctf_enum_value("F_GET_SEALS", F_GET_SEALS
)
202 #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,17,0)) */
203 #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0))
204 ctf_enum_value("F_GET_RW_HINT", F_GET_RW_HINT
)
205 ctf_enum_value("F_SET_RW_HINT", F_SET_RW_HINT
)
206 ctf_enum_value("F_GET_FILE_RW_HINT", F_GET_FILE_RW_HINT
)
207 ctf_enum_value("F_SET_FILE_RW_HINT", F_SET_FILE_RW_HINT
)
208 #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0)) */
212 #define OVERRIDE_32_fcntl
213 #define OVERRIDE_64_fcntl
214 SC_LTTNG_TRACEPOINT_EVENT(fcntl
,
215 TP_PROTO(sc_exit(long ret
,) unsigned int fd
, unsigned int cmd
, unsigned long arg
),
216 TP_ARGS(sc_exit(ret
,) fd
, cmd
, arg
),
218 sc_exit(ctf_integer(long, ret
, ret
))
219 sc_in(ctf_integer(unsigned int, fd
, fd
))
220 sc_in(ctf_enum(lttng_fcntl_cmd_flags
, unsigned int, cmd
, cmd
))
221 sc_inout(ctf_integer(unsigned long, arg
, arg
)))
223 #endif /* CONFIG_LTTNG_EXPERIMENTAL_BITWISE_ENUM */
225 #endif /* CREATE_SYSCALL_TABLE */