Commit | Line | Data |
---|---|---|
b7cdc182 | 1 | /* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only) */ |
6314c2d3 | 2 | |
05ea3e19 | 3 | #include <linux/fcntl.h> |
81669c41 FD |
4 | #include <linux/mman.h> |
5 | ||
7e42c4ec MD |
6 | #ifndef CREATE_SYSCALL_TABLE |
7 | ||
3cf55950 FD |
8 | /* |
9 | * The `flags` argument of the mmap syscall is split in two parts: | |
10 | * - The type of mapping is described by the four least significant bits of the 4 | |
11 | * bytes integer, | |
12 | * - The options on the mapping are described by the remaining 28 most | |
13 | * significant bits. | |
14 | */ | |
15 | #define MAPPING_TYPE_RESERVED_BITS 4 | |
16 | #define LTTNG_MMAP_FLAGS_TO_CTF(x) ((x) >> MAPPING_TYPE_RESERVED_BITS) | |
17 | ||
18 | /* | |
19 | * Enumeration of the mmap flags, as described in the 'mmap' | |
20 | * system call man page. | |
21 | */ | |
22 | SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_protection, | |
23 | TP_ENUM_VALUES( | |
24 | ctf_enum_value("PROT_EXEC", PROT_EXEC) | |
25 | ctf_enum_value("PROT_READ", PROT_READ) | |
26 | ctf_enum_value("PROT_WRITE", PROT_WRITE) | |
27 | ctf_enum_value("PROT_NONE", PROT_NONE) | |
28 | ) | |
29 | ) | |
30 | ||
31 | SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_flags_mapping_type, | |
32 | TP_ENUM_VALUES( | |
33 | ctf_enum_value("MAP_SHARED", MAP_SHARED) | |
34 | ctf_enum_value("MAP_PRIVATE", MAP_PRIVATE) | |
5f4c791e | 35 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) |
3cf55950 | 36 | ctf_enum_value("MAP_SHARED_VALIDATE", MAP_SHARED_VALIDATE) |
5f4c791e | 37 | #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */ |
3cf55950 FD |
38 | ) |
39 | ) | |
40 | ||
41 | /* | |
42 | * Shift the values of the options so we can read them from the `flags` integer | |
43 | * directly. | |
44 | */ | |
45 | SC_LTTNG_TRACEPOINT_ENUM(lttng_mmap_flags_options, | |
46 | TP_ENUM_VALUES( | |
47 | ctf_enum_value("<none>", 0) | |
1203baa4 FD |
48 | |
49 | #if defined (MAP_32BIT) && MAP_32BIT != 0 | |
3cf55950 | 50 | ctf_enum_value("MAP_32BIT", LTTNG_MMAP_FLAGS_TO_CTF(MAP_32BIT)) |
1203baa4 FD |
51 | #endif /* defined (MAP_32BIT) && MAP_32BIT != 0 */ |
52 | ||
3cf55950 FD |
53 | ctf_enum_value("MAP_ANONYMOUS", LTTNG_MMAP_FLAGS_TO_CTF(MAP_ANONYMOUS)) |
54 | ctf_enum_value("MAP_DENYWRITE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_DENYWRITE)) | |
55 | ctf_enum_value("MAP_EXECUTABLE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_EXECUTABLE)) | |
56 | ctf_enum_value("MAP_FIXED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_FIXED)) | |
1203baa4 | 57 | |
5f4c791e | 58 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,17,0)) |
3cf55950 | 59 | ctf_enum_value("MAP_FIXED_NOREPLACE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_FIXED_NOREPLACE)) |
5f4c791e | 60 | #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,17,0)) */ |
1203baa4 | 61 | |
3cf55950 FD |
62 | ctf_enum_value("MAP_GROWSDOWN", LTTNG_MMAP_FLAGS_TO_CTF(MAP_GROWSDOWN)) |
63 | ctf_enum_value("MAP_HUGETLB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGETLB)) | |
1203baa4 | 64 | |
5f4c791e | 65 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0)) |
1203baa4 FD |
66 | |
67 | #if defined (MAP_HUGE_2MB) && MAP_HUGE_2MB != 0 | |
68 | ctf_enum_value("MAP_HUGE_2MB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGE_2MB)) | |
69 | #endif /* defined (MAP_HUGE_2MB) && MAP_HUGE_2MB != 0 */ | |
70 | ||
71 | #if defined (MAP_HUGE_1GB) && MAP_HUGE_1GB != 0 | |
72 | ctf_enum_value("MAP_HUGE_1GB", LTTNG_MMAP_FLAGS_TO_CTF(MAP_HUGE_1GB)) | |
73 | #endif /* defined (MAP_HUGE_1GB) && MAP_HUGE_1GB != 0 */ | |
74 | ||
5f4c791e | 75 | #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,8,0)) */ |
1203baa4 | 76 | |
3cf55950 FD |
77 | ctf_enum_value("MAP_LOCKED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_LOCKED)) |
78 | ctf_enum_value("MAP_NONBLOCK", LTTNG_MMAP_FLAGS_TO_CTF(MAP_NONBLOCK)) | |
79 | ctf_enum_value("MAP_NORESERVE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_NORESERVE)) | |
80 | ctf_enum_value("MAP_POPULATE", LTTNG_MMAP_FLAGS_TO_CTF(MAP_POPULATE)) | |
81 | ctf_enum_value("MAP_STACK", LTTNG_MMAP_FLAGS_TO_CTF(MAP_STACK)) | |
1203baa4 | 82 | |
5f4c791e | 83 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) |
3cf55950 | 84 | ctf_enum_value("MAP_SYNC", LTTNG_MMAP_FLAGS_TO_CTF(MAP_SYNC)) |
5f4c791e | 85 | #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,15,0)) */ |
1203baa4 FD |
86 | |
87 | #if defined (MAP_UNINITIALIZED) && MAP_UNINITIALIZED != 0 | |
3cf55950 | 88 | ctf_enum_value("MAP_UNINITIALIZED", LTTNG_MMAP_FLAGS_TO_CTF(MAP_UNINITIALIZED)) |
1203baa4 | 89 | #endif /* defined (MAP_UNINITIALIZED) && MAP_UNINITIALIZED != 0 */ |
3cf55950 FD |
90 | ) |
91 | ) | |
92 | ||
93 | #define LTTNG_MMAP_FLAGS_TYPE \ | |
437d5aa5 MD |
94 | lttng_kernel_static_event_field("type", \ |
95 | lttng_kernel_static_type_enum(&__enum_lttng_mmap_flags_mapping_type, \ | |
96 | lttng_kernel_static_type_integer(4, 1, 0, __BYTE_ORDER, 16)), \ | |
97 | false, false, false) | |
3cf55950 FD |
98 | |
99 | #define LTTNG_MMAP_FLAGS_OPTIONS \ | |
437d5aa5 MD |
100 | lttng_kernel_static_event_field("options", \ |
101 | lttng_kernel_static_type_enum(&__enum_lttng_mmap_flags_options, \ | |
102 | lttng_kernel_static_type_integer(28, 1, 0, __BYTE_ORDER, 16)), \ | |
103 | false, false, false) | |
3cf55950 FD |
104 | |
105 | #if (__BYTE_ORDER == __LITTLE_ENDIAN) | |
106 | #define LTTNG_MMAP_FLAGS \ | |
437d5aa5 | 107 | lttng_kernel_static_event_field_array( \ |
3cf55950 | 108 | [0] = LTTNG_MMAP_FLAGS_TYPE, \ |
437d5aa5 MD |
109 | [1] = LTTNG_MMAP_FLAGS_OPTIONS, \ |
110 | ) | |
3cf55950 FD |
111 | #else |
112 | #define LTTNG_MMAP_FLAGS \ | |
437d5aa5 | 113 | lttng_kernel_static_event_field_array( \ |
3cf55950 | 114 | [0] = LTTNG_MMAP_FLAGS_OPTIONS, \ |
437d5aa5 MD |
115 | [1] = LTTNG_MMAP_FLAGS_TYPE, \ |
116 | ) | |
3cf55950 FD |
117 | #endif |
118 | ||
119 | /* | |
120 | * Use a custom field here so that tracer writes a single integer and the | |
121 | * work of splitting it up in two fields is left to the trace reader. | |
122 | */ | |
769ad370 MD |
123 | #define OVERRIDE_32_mmap |
124 | #define OVERRIDE_64_mmap | |
cb3ef14c | 125 | SC_LTTNG_TRACEPOINT_EVENT(mmap, |
769ad370 MD |
126 | TP_PROTO(sc_exit(unsigned long ret,) |
127 | unsigned long addr, unsigned long len, | |
128 | unsigned long prot, unsigned long flags, | |
129 | unsigned long fd, unsigned long off), | |
e17f92ba | 130 | TP_ARGS(sc_exit(ret,) addr, len, prot, flags, fd, off), |
769ad370 | 131 | TP_FIELDS(sc_exit(ctf_integer_hex(unsigned long, ret, ret)) |
57ede728 MD |
132 | sc_in(ctf_integer_hex(unsigned long, addr, addr)) |
133 | sc_in(ctf_integer(size_t, len, len)) | |
3cf55950 FD |
134 | sc_in(ctf_enum(lttng_mmap_protection, int, prot, prot)) |
135 | sc_in( | |
136 | ctf_custom_field( | |
137 | ctf_custom_type( | |
437d5aa5 | 138 | lttng_kernel_static_type_struct(2, LTTNG_MMAP_FLAGS, lttng_alignof(uint32_t) * CHAR_BIT) |
3cf55950 FD |
139 | ), |
140 | flags, | |
141 | ctf_custom_code( | |
142 | ctf_integer_type(uint32_t, flags) | |
143 | ) | |
144 | ) | |
145 | ) | |
57ede728 MD |
146 | sc_in(ctf_integer(int, fd, fd)) |
147 | sc_in(ctf_integer(off_t, offset, off)) | |
148 | ) | |
7e42c4ec MD |
149 | ) |
150 | ||
c1c07d68 GB |
151 | /* |
152 | * Enumeration of the open flags, as described in the 'open' | |
153 | * system call man page. | |
154 | */ | |
155 | SC_LTTNG_TRACEPOINT_ENUM(lttng_fcntl_cmd_flags, | |
156 | TP_ENUM_VALUES( | |
157 | ctf_enum_value("F_DUPFD", F_DUPFD) | |
158 | ctf_enum_value("F_GETFD", F_GETFD) | |
159 | ctf_enum_value("F_SETFD", F_SETFD) | |
160 | ctf_enum_value("F_GETFL", F_GETFL) | |
161 | ctf_enum_value("F_SETFL", F_SETFL) | |
162 | ctf_enum_value("F_GETLK", F_GETLK) | |
163 | ctf_enum_value("F_SETLK", F_SETLK) | |
164 | ctf_enum_value("F_SETLKW", F_SETLKW) | |
165 | ctf_enum_value("F_SETOWN", F_SETOWN) | |
166 | ctf_enum_value("F_GETOWN", F_GETOWN) | |
167 | ctf_enum_value("F_SETSIG", F_SETSIG) | |
168 | ctf_enum_value("F_GETSIG", F_GETSIG) | |
f25545b1 | 169 | #if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT) |
c1c07d68 GB |
170 | ctf_enum_value("F_GETLK64", F_GETLK64) |
171 | ctf_enum_value("F_SETLK64", F_SETLK64) | |
172 | ctf_enum_value("F_SETLKW64", F_SETLKW64) | |
f25545b1 | 173 | #endif /* #if !defined(CONFIG_64BIT) || defined(CONFIG_COMPAT) */ |
c1c07d68 GB |
174 | ctf_enum_value("F_SETOWN_EX", F_SETOWN_EX) |
175 | ctf_enum_value("F_GETOWN_EX", F_GETOWN_EX) | |
5f4c791e | 176 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0)) |
c1c07d68 | 177 | ctf_enum_value("F_GETOWNER_UIDS", F_GETOWNER_UIDS) |
5f4c791e MJ |
178 | #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,6,0)) */ |
179 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,15,0)) | |
c1c07d68 GB |
180 | ctf_enum_value("F_OFD_GETLK", F_OFD_GETLK) |
181 | ctf_enum_value("F_OFD_SETLK", F_OFD_SETLK) | |
182 | ctf_enum_value("F_OFD_SETLKW", F_OFD_SETLKW) | |
5f4c791e | 183 | #endif /* (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,15,0)) */ |
c1c07d68 GB |
184 | ctf_enum_value("F_SETLEASE", F_SETLEASE) |
185 | ctf_enum_value("F_GETLEASE", F_GETLEASE) | |
186 | ctf_enum_value("F_NOTIFY", F_NOTIFY) | |
187 | ctf_enum_value("F_CANCELLK", F_CANCELLK) | |
188 | ctf_enum_value("F_DUPFD_CLOEXEC", F_DUPFD_CLOEXEC) | |
189 | ctf_enum_value("F_SETPIPE_SZ", F_SETPIPE_SZ) | |
190 | ctf_enum_value("F_GETPIPE_SZ", F_GETPIPE_SZ) | |
5f4c791e | 191 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,17,0)) |
c1c07d68 GB |
192 | ctf_enum_value("F_ADD_SEALS", F_ADD_SEALS) |
193 | ctf_enum_value("F_GET_SEALS", F_GET_SEALS) | |
5f4c791e MJ |
194 | #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(3,17,0)) */ |
195 | #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0)) | |
c1c07d68 GB |
196 | ctf_enum_value("F_GET_RW_HINT", F_GET_RW_HINT) |
197 | ctf_enum_value("F_SET_RW_HINT", F_SET_RW_HINT) | |
198 | ctf_enum_value("F_GET_FILE_RW_HINT", F_GET_FILE_RW_HINT) | |
199 | ctf_enum_value("F_SET_FILE_RW_HINT", F_SET_FILE_RW_HINT) | |
5f4c791e | 200 | #endif /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,14,0)) */ |
c1c07d68 GB |
201 | ) |
202 | ) | |
203 | ||
204 | #define OVERRIDE_32_fcntl | |
205 | #define OVERRIDE_64_fcntl | |
206 | SC_LTTNG_TRACEPOINT_EVENT(fcntl, | |
207 | TP_PROTO(sc_exit(long ret,) unsigned int fd, unsigned int cmd, unsigned long arg), | |
208 | TP_ARGS(sc_exit(ret,) fd, cmd, arg), | |
209 | TP_FIELDS( | |
210 | sc_exit(ctf_integer(long, ret, ret)) | |
211 | sc_in(ctf_integer(unsigned int, fd, fd)) | |
212 | sc_in(ctf_enum(lttng_fcntl_cmd_flags, unsigned int, cmd, cmd)) | |
213 | sc_inout(ctf_integer(unsigned long, arg, arg))) | |
214 | ) | |
215 | ||
7e42c4ec | 216 | #endif /* CREATE_SYSCALL_TABLE */ |