1pub use arch::*;
18
19pub const AT_FDCWD: usize = -100isize as usize;
21
22#[cfg(target_arch = "x86_64")]
23mod arch {
24 use core::mem::{offset_of, size_of};
25
26 pub const SYS_READ: usize = 0;
27 pub const SYS_WRITE: usize = 1;
28 pub const SYS_CLOSE: usize = 3;
29 pub const SYS_FSTAT: usize = 5;
30 pub const SYS_LSEEK: usize = 8;
31 pub const SYS_MMAP: usize = 9;
32 pub const SYS_MPROTECT: usize = 10;
33 pub const SYS_MUNMAP: usize = 11;
34 pub const SYS_RT_SIGACTION: usize = 13;
35 pub const SYS_RT_SIGPROCMASK: usize = 14;
36 pub const SYS_RT_SIGRETURN: usize = 15;
37 pub const SYS_IOCTL: usize = 16;
38 pub const SYS_PREAD64: usize = 17;
39 pub const SYS_PWRITE64: usize = 18;
40 pub const SYS_SCHED_YIELD: usize = 24;
41 pub const SYS_MADVISE: usize = 28;
42 pub const SYS_SHMGET: usize = 29;
43 pub const SYS_SHMAT: usize = 30;
44 pub const SYS_SHMCTL: usize = 31;
45 pub const SYS_GETPID: usize = 39;
46 pub const SYS_SOCKET: usize = 41;
47 pub const SYS_CONNECT: usize = 42;
48 pub const SYS_SENDTO: usize = 44;
49 pub const SYS_RECVFROM: usize = 45;
50 pub const SYS_SENDMSG: usize = 46;
51 pub const SYS_RECVMSG: usize = 47;
52 pub const SYS_SHUTDOWN: usize = 48;
53 pub const SYS_BIND: usize = 49;
54 pub const SYS_LISTEN: usize = 50;
55 pub const SYS_GETSOCKNAME: usize = 51;
56 pub const SYS_GETPEERNAME: usize = 52;
57 pub const SYS_SETSOCKOPT: usize = 54;
58 pub const SYS_GETSOCKOPT: usize = 55;
59 pub const SYS_CLONE: usize = 56;
60 pub const SYS_EXECVE: usize = 59;
61 pub const SYS_EXIT: usize = 60;
62 pub const SYS_WAIT4: usize = 61;
63 pub const SYS_KILL: usize = 62;
64 pub const SYS_UNAME: usize = 63;
65 pub const SYS_SHMDT: usize = 67;
66 pub const SYS_FCNTL: usize = 72;
67 pub const SYS_FLOCK: usize = 73;
68 pub const SYS_FSYNC: usize = 74;
69 pub const SYS_FTRUNCATE: usize = 77;
70 pub const SYS_GETCWD: usize = 79;
71 pub const SYS_CHDIR: usize = 80;
72 pub const SYS_FCHMOD: usize = 91;
73 pub const SYS_FCHOWN: usize = 93;
74 pub const SYS_SYSINFO: usize = 99;
75 pub const SYS_PTRACE: usize = 101;
76 pub const SYS_GETUID: usize = 102;
77 pub const SYS_GETEUID: usize = 107;
78 pub const SYS_SETSID: usize = 112;
79 pub const SYS_SIGALTSTACK: usize = 131;
80 pub const SYS_STATFS: usize = 137;
81 pub const SYS_PIVOT_ROOT: usize = 155;
82 pub const SYS_PRCTL: usize = 157;
83 pub const SYS_CHROOT: usize = 161;
84 pub const SYS_MOUNT: usize = 165;
85 pub const SYS_UMOUNT2: usize = 166;
86 pub const SYS_INIT_MODULE: usize = 175;
87 pub const SYS_DELETE_MODULE: usize = 176;
88 pub const SYS_GETTID: usize = 186;
89 pub const SYS_FUTEX: usize = 202;
90 pub const SYS_SCHED_GETAFFINITY: usize = 204;
91 pub const SYS_GETDENTS64: usize = 217;
92 pub const SYS_CLOCK_GETTIME: usize = 228;
93 pub const SYS_EXIT_GROUP: usize = 231;
94 pub const SYS_TGKILL: usize = 234;
95 pub const SYS_KEXEC_LOAD: usize = 246;
96 pub const SYS_WAITID: usize = 247;
97 pub const SYS_ADD_KEY: usize = 248;
98 pub const SYS_REQUEST_KEY: usize = 249;
99 pub const SYS_KEYCTL: usize = 250;
100 pub const SYS_INOTIFY_ADD_WATCH: usize = 254;
101 pub const SYS_INOTIFY_RM_WATCH: usize = 255;
102 pub const SYS_OPENAT: usize = 257;
103 pub const SYS_MKDIRAT: usize = 258;
104 pub const SYS_FCHOWNAT: usize = 260;
105 pub const SYS_NEWFSTATAT: usize = 262;
106 pub const SYS_UNLINKAT: usize = 263;
107 pub const SYS_RENAMEAT: usize = 264;
108 pub const SYS_LINKAT: usize = 265;
109 pub const SYS_SYMLINKAT: usize = 266;
110 pub const SYS_READLINKAT: usize = 267;
111 pub const SYS_FCHMODAT: usize = 268;
112 pub const SYS_FACCESSAT: usize = 269;
113 pub const SYS_PPOLL: usize = 271;
114 pub const SYS_UNSHARE: usize = 272;
115 pub const SYS_UTIMENSAT: usize = 280;
116 pub const SYS_ACCEPT4: usize = 288;
117 pub const SYS_EVENTFD2: usize = 290;
118 pub const SYS_DUP3: usize = 292;
119 pub const SYS_PIPE2: usize = 293;
120 pub const SYS_INOTIFY_INIT1: usize = 294;
121 pub const SYS_PERF_EVENT_OPEN: usize = 298;
122 pub const SYS_OPEN_BY_HANDLE_AT: usize = 304;
123 pub const SYS_SETNS: usize = 308;
124 pub const SYS_PROCESS_VM_READV: usize = 310;
125 pub const SYS_PROCESS_VM_WRITEV: usize = 311;
126 pub const SYS_FINIT_MODULE: usize = 313;
127 pub const SYS_RENAMEAT2: usize = 316;
128 pub const SYS_SECCOMP: usize = 317;
129 pub const SYS_GETRANDOM: usize = 318;
130 pub const SYS_MEMFD_CREATE: usize = 319;
131 pub const SYS_KEXEC_FILE_LOAD: usize = 320;
132 pub const SYS_BPF: usize = 321;
133 pub const SYS_EXECVEAT: usize = 322;
134 pub const SYS_USERFAULTFD: usize = 323;
135 pub const SYS_CLOSE_RANGE: usize = 436;
136 pub const SYS_LANDLOCK_CREATE_RULESET: usize = 444;
137 pub const SYS_LANDLOCK_ADD_RULE: usize = 445;
138 pub const SYS_LANDLOCK_RESTRICT_SELF: usize = 446;
139 pub const SYS_ARCH_PRCTL: usize = 158;
141
142 pub const O_RDONLY: usize = 0;
143 pub const O_WRONLY: usize = 1;
144 pub const O_RDWR: usize = 2;
145 pub const O_CREAT: usize = 0x40;
146 pub const O_EXCL: usize = 0x80;
147 pub const O_TRUNC: usize = 0x200;
148 pub const O_NONBLOCK: usize = 0x800;
149 pub const O_DIRECTORY: usize = 0x1_0000;
150 pub const O_NOFOLLOW: usize = 0x2_0000;
151 pub const O_CLOEXEC: usize = 0x8_0000;
152 pub const O_PATH: usize = 0x20_0000;
153 pub const O_TMPFILE: usize = 0x40_0000 | O_DIRECTORY;
154
155 #[repr(C)]
157 #[derive(Clone, Copy, Default)]
158 pub struct Stat {
159 pub st_dev: u64,
160 pub st_ino: u64,
161 pub st_nlink: u64,
162 pub st_mode: u32,
163 pub st_uid: u32,
164 pub st_gid: u32,
165 __pad0: u32,
166 pub st_rdev: u64,
167 pub st_size: i64,
168 pub st_blksize: i64,
169 pub st_blocks: i64,
170 pub st_atime: i64,
171 pub st_atime_nsec: i64,
172 pub st_mtime: i64,
173 pub st_mtime_nsec: i64,
174 pub st_ctime: i64,
175 pub st_ctime_nsec: i64,
176 __unused: [i64; 3],
177 }
178 const _: () = assert!(size_of::<Stat>() == 144 && offset_of!(Stat, st_mode) == 24 && offset_of!(Stat, st_size) == 48 && offset_of!(Stat, st_mtime) == 88);
179
180 pub const fn clone_args(parent_tid: usize, child_tid: usize, tls: usize) -> [usize; 3] {
182 [parent_tid, child_tid, tls]
183 }
184}
185
186#[cfg(target_arch = "aarch64")]
187mod arch {
188 use core::mem::{offset_of, size_of};
189
190 pub const SYS_READ: usize = 63;
191 pub const SYS_WRITE: usize = 64;
192 pub const SYS_CLOSE: usize = 57;
193 pub const SYS_FSTAT: usize = 80;
194 pub const SYS_LSEEK: usize = 62;
195 pub const SYS_MMAP: usize = 222;
196 pub const SYS_MPROTECT: usize = 226;
197 pub const SYS_MUNMAP: usize = 215;
198 pub const SYS_RT_SIGACTION: usize = 134;
199 pub const SYS_RT_SIGPROCMASK: usize = 135;
200 pub const SYS_RT_SIGRETURN: usize = 139;
201 pub const SYS_IOCTL: usize = 29;
202 pub const SYS_PREAD64: usize = 67;
203 pub const SYS_PWRITE64: usize = 68;
204 pub const SYS_SCHED_YIELD: usize = 124;
205 pub const SYS_MADVISE: usize = 233;
206 pub const SYS_SHMGET: usize = 194;
207 pub const SYS_SHMAT: usize = 196;
208 pub const SYS_SHMCTL: usize = 195;
209 pub const SYS_GETPID: usize = 172;
210 pub const SYS_SOCKET: usize = 198;
211 pub const SYS_CONNECT: usize = 203;
212 pub const SYS_SENDTO: usize = 206;
213 pub const SYS_RECVFROM: usize = 207;
214 pub const SYS_SENDMSG: usize = 211;
215 pub const SYS_RECVMSG: usize = 212;
216 pub const SYS_SHUTDOWN: usize = 210;
217 pub const SYS_BIND: usize = 200;
218 pub const SYS_LISTEN: usize = 201;
219 pub const SYS_GETSOCKNAME: usize = 204;
220 pub const SYS_GETPEERNAME: usize = 205;
221 pub const SYS_SETSOCKOPT: usize = 208;
222 pub const SYS_GETSOCKOPT: usize = 209;
223 pub const SYS_CLONE: usize = 220;
224 pub const SYS_EXECVE: usize = 221;
225 pub const SYS_EXIT: usize = 93;
226 pub const SYS_WAIT4: usize = 260;
227 pub const SYS_KILL: usize = 129;
228 pub const SYS_UNAME: usize = 160;
229 pub const SYS_SHMDT: usize = 197;
230 pub const SYS_FCNTL: usize = 25;
231 pub const SYS_FLOCK: usize = 32;
232 pub const SYS_FSYNC: usize = 82;
233 pub const SYS_FTRUNCATE: usize = 46;
234 pub const SYS_GETCWD: usize = 17;
235 pub const SYS_CHDIR: usize = 49;
236 pub const SYS_FCHMOD: usize = 52;
237 pub const SYS_FCHOWN: usize = 55;
238 pub const SYS_SYSINFO: usize = 179;
239 pub const SYS_PTRACE: usize = 117;
240 pub const SYS_GETUID: usize = 174;
241 pub const SYS_GETEUID: usize = 175;
242 pub const SYS_SETSID: usize = 157;
243 pub const SYS_SIGALTSTACK: usize = 132;
244 pub const SYS_STATFS: usize = 43;
245 pub const SYS_PIVOT_ROOT: usize = 41;
246 pub const SYS_PRCTL: usize = 167;
247 pub const SYS_CHROOT: usize = 51;
248 pub const SYS_MOUNT: usize = 40;
249 pub const SYS_UMOUNT2: usize = 39;
250 pub const SYS_INIT_MODULE: usize = 105;
251 pub const SYS_DELETE_MODULE: usize = 106;
252 pub const SYS_GETTID: usize = 178;
253 pub const SYS_FUTEX: usize = 98;
254 pub const SYS_SCHED_GETAFFINITY: usize = 123;
255 pub const SYS_GETDENTS64: usize = 61;
256 pub const SYS_CLOCK_GETTIME: usize = 113;
257 pub const SYS_EXIT_GROUP: usize = 94;
258 pub const SYS_TGKILL: usize = 131;
259 pub const SYS_KEXEC_LOAD: usize = 104;
260 pub const SYS_WAITID: usize = 95;
261 pub const SYS_ADD_KEY: usize = 217;
262 pub const SYS_REQUEST_KEY: usize = 218;
263 pub const SYS_KEYCTL: usize = 219;
264 pub const SYS_INOTIFY_ADD_WATCH: usize = 27;
265 pub const SYS_INOTIFY_RM_WATCH: usize = 28;
266 pub const SYS_OPENAT: usize = 56;
267 pub const SYS_MKDIRAT: usize = 34;
268 pub const SYS_FCHOWNAT: usize = 54;
269 pub const SYS_NEWFSTATAT: usize = 79;
270 pub const SYS_UNLINKAT: usize = 35;
271 pub const SYS_RENAMEAT: usize = 38;
272 pub const SYS_LINKAT: usize = 37;
273 pub const SYS_SYMLINKAT: usize = 36;
274 pub const SYS_READLINKAT: usize = 78;
275 pub const SYS_FCHMODAT: usize = 53;
276 pub const SYS_FACCESSAT: usize = 48;
277 pub const SYS_PPOLL: usize = 73;
278 pub const SYS_UNSHARE: usize = 97;
279 pub const SYS_UTIMENSAT: usize = 88;
280 pub const SYS_ACCEPT4: usize = 242;
281 pub const SYS_EVENTFD2: usize = 19;
282 pub const SYS_DUP3: usize = 24;
283 pub const SYS_PIPE2: usize = 59;
284 pub const SYS_INOTIFY_INIT1: usize = 26;
285 pub const SYS_PERF_EVENT_OPEN: usize = 241;
286 pub const SYS_OPEN_BY_HANDLE_AT: usize = 265;
287 pub const SYS_SETNS: usize = 268;
288 pub const SYS_PROCESS_VM_READV: usize = 270;
289 pub const SYS_PROCESS_VM_WRITEV: usize = 271;
290 pub const SYS_FINIT_MODULE: usize = 273;
291 pub const SYS_RENAMEAT2: usize = 276;
292 pub const SYS_SECCOMP: usize = 277;
293 pub const SYS_GETRANDOM: usize = 278;
294 pub const SYS_MEMFD_CREATE: usize = 279;
295 pub const SYS_KEXEC_FILE_LOAD: usize = 294;
296 pub const SYS_BPF: usize = 280;
297 pub const SYS_EXECVEAT: usize = 281;
298 pub const SYS_USERFAULTFD: usize = 282;
299 pub const SYS_CLOSE_RANGE: usize = 436;
300 pub const SYS_LANDLOCK_CREATE_RULESET: usize = 444;
301 pub const SYS_LANDLOCK_ADD_RULE: usize = 445;
302 pub const SYS_LANDLOCK_RESTRICT_SELF: usize = 446;
303
304 pub const O_RDONLY: usize = 0;
305 pub const O_WRONLY: usize = 1;
306 pub const O_RDWR: usize = 2;
307 pub const O_CREAT: usize = 0x40;
308 pub const O_EXCL: usize = 0x80;
309 pub const O_TRUNC: usize = 0x200;
310 pub const O_NONBLOCK: usize = 0x800;
311 pub const O_DIRECTORY: usize = 0x4000;
312 pub const O_NOFOLLOW: usize = 0x8000;
313 pub const O_CLOEXEC: usize = 0x8_0000;
314 pub const O_PATH: usize = 0x20_0000;
315 pub const O_TMPFILE: usize = 0x40_0000 | O_DIRECTORY;
316
317 #[repr(C)]
319 #[derive(Clone, Copy, Default)]
320 pub struct Stat {
321 pub st_dev: u64,
322 pub st_ino: u64,
323 pub st_mode: u32,
324 pub st_nlink: u32,
325 pub st_uid: u32,
326 pub st_gid: u32,
327 pub st_rdev: u64,
328 __pad1: u64,
329 pub st_size: i64,
330 pub st_blksize: i32,
331 __pad2: i32,
332 pub st_blocks: i64,
333 pub st_atime: i64,
334 pub st_atime_nsec: i64,
335 pub st_mtime: i64,
336 pub st_mtime_nsec: i64,
337 pub st_ctime: i64,
338 pub st_ctime_nsec: i64,
339 __unused: [u32; 2],
340 }
341 const _: () = assert!(size_of::<Stat>() == 128 && offset_of!(Stat, st_mode) == 16 && offset_of!(Stat, st_size) == 48 && offset_of!(Stat, st_mtime) == 88);
342
343 pub const fn clone_args(parent_tid: usize, child_tid: usize, tls: usize) -> [usize; 3] {
345 [parent_tid, tls, child_tid]
346 }
347}