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