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