1 #include "sandboxed_api/sandbox2/syscall_defs.h"
2
3 #include <sys/types.h>
4
5 #include <array>
6 #include <cstdint>
7 #include <string>
8 #include <vector>
9
10 #include "absl/algorithm/container.h"
11 #include "absl/status/status.h"
12 #include "absl/status/statusor.h"
13 #include "absl/strings/escaping.h"
14 #include "absl/strings/str_cat.h"
15 #include "absl/strings/str_format.h"
16 #include "absl/strings/string_view.h"
17 #include "sandboxed_api/config.h"
18 #include "sandboxed_api/sandbox2/util.h"
19
20 namespace sandbox2 {
21
GetArgumentDescription(uint64_t value,syscalls::ArgType type,pid_t pid)22 std::string SyscallTable::Entry::GetArgumentDescription(uint64_t value,
23 syscalls::ArgType type,
24 pid_t pid) {
25 std::string ret = absl::StrFormat("%#x", value);
26 switch (type) {
27 case syscalls::kOct:
28 absl::StrAppendFormat(&ret, " [\\0%o]", value);
29 break;
30 case syscalls::kPath:
31 if (auto path_or = util::ReadCPathFromPid(pid, value); path_or.ok()) {
32 absl::StrAppendFormat(&ret, " ['%s']",
33 absl::CHexEscape(path_or.value()));
34 } else {
35 absl::StrAppend(&ret, " [unreadable path]");
36 }
37 break;
38 case syscalls::kInt:
39 absl::StrAppendFormat(&ret, " [%d]", value);
40 break;
41 default:
42 break;
43 }
44 return ret;
45 }
46
GetName(int syscall) const47 absl::string_view SyscallTable::GetName(int syscall) const {
48 auto entry = GetEntry(syscall);
49 if (!entry.ok()) {
50 return "";
51 }
52 return entry->name;
53 }
54
55 namespace {
56
57 template <typename... ArgTypes>
MakeEntry(int nr,absl::string_view name,ArgTypes...arg_types)58 constexpr SyscallTable::Entry MakeEntry(int nr, absl::string_view name,
59 ArgTypes... arg_types) {
60 static_assert(sizeof...(arg_types) <= syscalls::kMaxArgs,
61 "Too many arguments for syscall");
62 return {nr, name, sizeof...(arg_types), {arg_types...}};
63 }
64
65 struct UnknownArguments {};
MakeEntry(int nr,absl::string_view name,UnknownArguments)66 constexpr SyscallTable::Entry MakeEntry(int nr, absl::string_view name,
67 UnknownArguments) {
68 return {nr,
69 name,
70 -1,
71 {syscalls::kGen, syscalls::kGen, syscalls::kGen, syscalls::kGen,
72 syscalls::kGen, syscalls::kGen}};
73 }
74
75 } // namespace
76
GetEntry(int syscall) const77 absl::StatusOr<SyscallTable::Entry> SyscallTable::GetEntry(int syscall) const {
78 auto it = absl::c_lower_bound(
79 data_, syscall, [](const SyscallTable::Entry& entry, int syscall) {
80 return entry.nr < syscall;
81 });
82 if (it == data_.end() || it->nr != syscall) {
83 return absl::NotFoundError(absl::StrCat("Syscall not found: ", syscall));
84 }
85 return *it;
86 }
87
GetEntry(absl::string_view name) const88 absl::StatusOr<SyscallTable::Entry> SyscallTable::GetEntry(
89 absl::string_view name) const {
90 // Note: There's no uniqueness guarantee of syscall names in the table, but
91 // other than typos it's likely safe to assume uniqueness.
92 auto filter = [name](const SyscallTable::Entry& entry) {
93 return entry.name == name;
94 };
95 auto it = absl::c_find_if(data_, filter);
96 if (it != data_.end()) {
97 return *it;
98 } else {
99 return absl::NotFoundError(absl::StrCat("Name not found: ", name));
100 }
101 }
102
GetArgumentsDescription(int syscall,const uint64_t values[],pid_t pid) const103 std::vector<std::string> SyscallTable::GetArgumentsDescription(
104 int syscall, const uint64_t values[], pid_t pid) const {
105 static SyscallTable::Entry kInvalidEntry =
106 MakeEntry(-1, "", UnknownArguments());
107 auto entry = GetEntry(syscall);
108 if (!entry.ok()) {
109 entry = kInvalidEntry;
110 }
111
112 int num_args = entry->GetNumArgs();
113 std::vector<std::string> rv;
114 rv.reserve(num_args);
115 for (int i = 0; i < num_args; ++i) {
116 rv.push_back(SyscallTable::Entry::GetArgumentDescription(
117 values[i], entry->arg_types[i], pid));
118 }
119 return rv;
120 }
121
122 namespace syscalls {
123 namespace {
124
125 // TODO(C++20) Use std::is_sorted
126 template <typename Container, typename Compare>
IsSorted(const Container & container,Compare comp)127 constexpr bool IsSorted(const Container& container, Compare comp) {
128 auto it = std::begin(container);
129 if (it == std::end(container)) {
130 return true;
131 }
132 auto last = it;
133 for (++it; it != std::end(container); ++it) {
134 if (!comp(*last, *it)) {
135 return false;
136 }
137 last = it;
138 }
139 return true;
140 }
141
142 // Syscall description table for Linux x86_64
143 constexpr std::array kSyscallDataX8664 = {
144 // clang-format off
145 MakeEntry(0, "read", kInt, kHex, kInt),
146 MakeEntry(1, "write", kInt, kHex, kInt),
147 MakeEntry(2, "open", kPath, kHex, kOct),
148 MakeEntry(3, "close", kInt),
149 MakeEntry(4, "stat", kPath, kGen),
150 MakeEntry(5, "fstat", kInt, kHex),
151 MakeEntry(6, "lstat", kPath, kGen),
152 MakeEntry(7, "poll", kGen, kInt, kInt),
153 MakeEntry(8, "lseek", kInt, kInt, kInt),
154 MakeEntry(9, "mmap", kHex, kInt, kHex, kHex, kInt, kInt),
155 MakeEntry(10, "mprotect", kHex, kInt, kHex),
156 MakeEntry(11, "munmap", kHex, kInt),
157 MakeEntry(12, "brk", kInt),
158 MakeEntry(13, "rt_sigaction", kSignal, kHex, kHex, kInt),
159 MakeEntry(14, "rt_sigprocmask", kInt, kHex, kHex, kInt),
160 MakeEntry(15, "rt_sigreturn"),
161 MakeEntry(16, "ioctl", kInt, kInt, kHex),
162 MakeEntry(17, "pread64", kInt, kHex, kInt, kInt),
163 MakeEntry(18, "pwrite64", kInt, kHex, kInt, kInt),
164 MakeEntry(19, "readv", kInt, kHex, kInt),
165 MakeEntry(20, "writev", kInt, kHex, kInt),
166 MakeEntry(21, "access", kPath, kOct),
167 MakeEntry(22, "pipe", kHex),
168 MakeEntry(23, "select", kInt, kHex, kHex, kHex, kHex),
169 MakeEntry(24, "sched_yield"),
170 MakeEntry(25, "mremap", kHex, kInt, kInt, kInt, kHex),
171 MakeEntry(26, "msync", kHex, kInt, kInt),
172 MakeEntry(27, "mincore", kHex, kInt, kHex),
173 MakeEntry(28, "madvise", kHex, kInt, kInt),
174 MakeEntry(29, "shmget", kInt, kInt, kHex),
175 MakeEntry(30, "shmat", kInt, kHex, kHex),
176 MakeEntry(31, "shmctl", kInt, kInt, kHex),
177 MakeEntry(32, "dup", kInt),
178 MakeEntry(33, "dup2", kInt, kInt),
179 MakeEntry(34, "pause"),
180 MakeEntry(35, "nanosleep", kHex, kHex),
181 MakeEntry(36, "getitimer", kInt, kHex),
182 MakeEntry(37, "alarm", kInt),
183 MakeEntry(38, "setitimer", kInt, kHex, kHex),
184 MakeEntry(39, "getpid"),
185 MakeEntry(40, "sendfile", kInt, kInt, kHex, kInt),
186 MakeEntry(41, "socket", kAddressFamily, kInt, kInt),
187 MakeEntry(42, "connect", kInt, kSockaddr, kInt),
188 MakeEntry(43, "accept", kInt, kSockaddr, kHex),
189 MakeEntry(44, "sendto", kInt, kHex, kInt, kHex, kSockaddr, kInt),
190 MakeEntry(45, "recvfrom", kInt, kHex, kInt, kHex, kSockaddr, kHex),
191 MakeEntry(46, "sendmsg", kInt, kSockmsghdr, kHex),
192 MakeEntry(47, "recvmsg", kInt, kHex, kInt),
193 MakeEntry(48, "shutdown", kInt, kInt),
194 MakeEntry(49, "bind", kInt, kSockaddr, kInt),
195 MakeEntry(50, "listen", kInt, kInt),
196 MakeEntry(51, "getsockname", kInt, kSockaddr, kHex),
197 MakeEntry(52, "getpeername", kInt, kSockaddr, kHex),
198 MakeEntry(53, "socketpair", kAddressFamily, kInt, kInt, kHex),
199 MakeEntry(54, "setsockopt", kInt, kInt, kInt, kHex, kHex),
200 MakeEntry(55, "getsockopt", kInt, kInt, kInt, kHex, kInt),
201 MakeEntry(56, "clone", kCloneFlag, kHex, kHex, kHex, kHex),
202 MakeEntry(57, "fork"),
203 MakeEntry(58, "vfork"),
204 MakeEntry(59, "execve", kPath, kHex, kHex),
205 MakeEntry(60, "exit", kInt),
206 MakeEntry(61, "wait4", kInt, kHex, kHex, kHex),
207 MakeEntry(62, "kill", kInt, kSignal),
208 MakeEntry(63, "uname", kInt),
209 MakeEntry(64, "semget", kInt, kInt, kHex),
210 MakeEntry(65, "semop", kInt, kHex, kInt),
211 MakeEntry(66, "semctl", kInt, kInt, kInt, kHex),
212 MakeEntry(67, "shmdt", kHex),
213 MakeEntry(68, "msgget", kInt, kHex),
214 MakeEntry(69, "msgsnd", kInt, kHex, kInt, kHex),
215 MakeEntry(70, "msgrcv", kInt, kHex, kInt, kInt, kHex),
216 MakeEntry(71, "msgctl", kInt, kInt, kHex),
217 MakeEntry(72, "fcntl", kInt, kInt, kHex),
218 MakeEntry(73, "flock", kInt, kInt),
219 MakeEntry(74, "fsync", kInt),
220 MakeEntry(75, "fdatasync", kInt),
221 MakeEntry(76, "truncate", kPath, kInt),
222 MakeEntry(77, "ftruncate", kInt, kInt),
223 MakeEntry(78, "getdents", kInt, kHex, kInt),
224 MakeEntry(79, "getcwd", kHex, kInt),
225 MakeEntry(80, "chdir", kPath),
226 MakeEntry(81, "fchdir", kInt),
227 MakeEntry(82, "rename", kPath, kPath),
228 MakeEntry(83, "mkdir", kPath, kOct),
229 MakeEntry(84, "rmdir", kPath),
230 MakeEntry(85, "creat", kPath, kOct),
231 MakeEntry(86, "link", kPath, kPath),
232 MakeEntry(87, "unlink", kPath),
233 MakeEntry(88, "symlink", kPath, kPath),
234 MakeEntry(89, "readlink", kPath, kHex, kInt),
235 MakeEntry(90, "chmod", kPath, kOct),
236 MakeEntry(91, "fchmod", kInt, kOct),
237 MakeEntry(92, "chown", kPath, kInt, kInt),
238 MakeEntry(93, "fchown", kInt, kInt, kInt),
239 MakeEntry(94, "lchown", kPath, kInt, kInt),
240 MakeEntry(95, "umask", kHex),
241 MakeEntry(96, "gettimeofday", kHex, kHex),
242 MakeEntry(97, "getrlimit", kInt, kHex),
243 MakeEntry(98, "getrusage", kInt, kHex),
244 MakeEntry(99, "sysinfo", kHex),
245 MakeEntry(100, "times", kHex),
246 MakeEntry(101, "ptrace", kInt, kInt, kHex, kHex),
247 MakeEntry(102, "getuid"),
248 MakeEntry(103, "syslog", kInt, kHex, kInt),
249 MakeEntry(104, "getgid"),
250 MakeEntry(105, "setuid", kInt),
251 MakeEntry(106, "setgid", kInt),
252 MakeEntry(107, "geteuid"),
253 MakeEntry(108, "getegid"),
254 MakeEntry(109, "setpgid", kInt, kInt),
255 MakeEntry(110, "getppid"),
256 MakeEntry(111, "getpgrp"),
257 MakeEntry(112, "setsid"),
258 MakeEntry(113, "setreuid", kInt, kInt),
259 MakeEntry(114, "setregid", kInt, kInt),
260 MakeEntry(115, "getgroups", kInt, kHex),
261 MakeEntry(116, "setgroups", kInt, kHex),
262 MakeEntry(117, "setresuid", kInt, kInt, kInt),
263 MakeEntry(118, "getresuid", kHex, kHex, kHex),
264 MakeEntry(119, "setresgid", kInt, kInt, kInt),
265 MakeEntry(120, "getresgid", kHex, kHex, kHex),
266 MakeEntry(121, "getpgid", kInt),
267 MakeEntry(122, "setfsuid", kInt),
268 MakeEntry(123, "setfsgid", kInt),
269 MakeEntry(124, "getsid", kInt),
270 MakeEntry(125, "capget", kHex, kHex),
271 MakeEntry(126, "capset", kHex, kHex),
272 MakeEntry(127, "rt_sigpending", kHex, kInt),
273 MakeEntry(128, "rt_sigtimedwait", kHex, kHex, kHex, kInt),
274 MakeEntry(129, "rt_sigqueueinfo", kInt, kSignal, kHex),
275 MakeEntry(130, "rt_sigsuspend", kHex, kInt),
276 MakeEntry(131, "sigaltstack", kHex, kHex),
277 MakeEntry(132, "utime", kPath, kHex),
278 MakeEntry(133, "mknod", kPath, kOct, kHex),
279 MakeEntry(134, "uselib", kPath),
280 MakeEntry(135, "personality", kHex),
281 MakeEntry(136, "ustat", kHex, kHex),
282 MakeEntry(137, "statfs", kPath, kHex),
283 MakeEntry(138, "fstatfs", kInt, kHex),
284 MakeEntry(139, "sysfs", kInt, kInt, kInt),
285 MakeEntry(140, "getpriority", kInt, kInt),
286 MakeEntry(141, "setpriority", kInt, kInt, kInt),
287 MakeEntry(142, "sched_setparam", kInt, kHex),
288 MakeEntry(143, "sched_getparam", kInt, kHex),
289 MakeEntry(144, "sched_setscheduler", kInt, kInt, kHex),
290 MakeEntry(145, "sched_getscheduler", kInt),
291 MakeEntry(146, "sched_get_priority_max", kInt),
292 MakeEntry(147, "sched_get_priority_min", kInt),
293 MakeEntry(148, "sched_rr_get_interval", kInt, kHex),
294 MakeEntry(149, "mlock", kInt, kInt),
295 MakeEntry(150, "munlock", kInt, kInt),
296 MakeEntry(151, "mlockall", kHex),
297 MakeEntry(152, "munlockall"),
298 MakeEntry(153, "vhangup"),
299 MakeEntry(154, "modify_ldt", kInt, kHex, kInt),
300 MakeEntry(155, "pivot_root", kPath, kPath),
301 MakeEntry(156, "_sysctl", kHex),
302 MakeEntry(157, "prctl", kInt, kHex, kHex, kHex, kHex),
303 MakeEntry(158, "arch_prctl", kInt, kHex),
304 MakeEntry(159, "adjtimex", kHex),
305 MakeEntry(160, "setrlimit", kInt, kHex),
306 MakeEntry(161, "chroot", kPath),
307 MakeEntry(162, "sync"),
308 MakeEntry(163, "acct", kPath),
309 MakeEntry(164, "settimeofday", kHex, kHex),
310 MakeEntry(165, "mount", kPath, kPath, kString, kHex, kGen),
311 MakeEntry(166, "umount2", kPath, kHex),
312 MakeEntry(167, "swapon", kPath, kHex),
313 MakeEntry(168, "swapoff", kPath),
314 MakeEntry(169, "reboot", kInt, kHex, kHex, kGen),
315 MakeEntry(170, "sethostname", kString, kInt),
316 MakeEntry(171, "setdomainname", kString, kInt),
317 MakeEntry(172, "iopl", kInt),
318 MakeEntry(173, "ioperm", kInt, kInt, kInt),
319 MakeEntry(174, "create_module", kString, kInt),
320 MakeEntry(175, "init_module", kGen, kInt, kString),
321 MakeEntry(176, "delete_module", kString, kHex),
322 MakeEntry(177, "get_kernel_syms", kHex),
323 MakeEntry(178, "query_module", kString, kInt, kGen, kInt, kGen),
324 MakeEntry(179, "quotactl", kInt, kPath, kInt, kGen),
325 MakeEntry(180, "nfsservctl", kInt, kGen, kGen),
326 MakeEntry(181, "getpmsg", UnknownArguments()),
327 MakeEntry(182, "putpmsg", UnknownArguments()),
328 MakeEntry(183, "afs_syscall", UnknownArguments()),
329 MakeEntry(184, "tuxcall", UnknownArguments()),
330 MakeEntry(185, "security", UnknownArguments()),
331 MakeEntry(186, "gettid"),
332 MakeEntry(187, "readahead", kInt, kInt, kInt),
333 MakeEntry(188, "setxattr", kPath, kString, kGen, kInt, kHex),
334 MakeEntry(189, "lsetxattr", kPath, kString, kGen, kInt, kHex),
335 MakeEntry(190, "fsetxattr", kInt, kString, kGen, kInt, kHex),
336 MakeEntry(191, "getxattr", kPath, kString, kGen, kInt),
337 MakeEntry(192, "lgetxattr", kPath, kString, kGen, kInt),
338 MakeEntry(193, "fgetxattr", kInt, kString, kGen, kInt),
339 MakeEntry(194, "listxattr", kPath, kGen, kInt),
340 MakeEntry(195, "llistxattr", kPath, kGen, kInt),
341 MakeEntry(196, "flistxattr", kInt, kGen, kInt),
342 MakeEntry(197, "removexattr", kPath, kString),
343 MakeEntry(198, "lremovexattr", kPath, kString),
344 MakeEntry(199, "fremovexattr", kInt, kString),
345 MakeEntry(200, "tkill", kInt, kSignal),
346 MakeEntry(201, "time", kHex),
347 MakeEntry(202, "futex", kGen, kInt, kInt, kGen, kGen, kInt),
348 MakeEntry(203, "sched_setaffinity", kInt, kInt, kHex),
349 MakeEntry(204, "sched_getaffinity", kInt, kInt, kHex),
350 MakeEntry(205, "set_thread_area", kHex),
351 MakeEntry(206, "io_setup", kInt, kHex),
352 MakeEntry(207, "io_destroy", kInt),
353 MakeEntry(208, "io_getevents", kInt, kInt, kInt, kHex, kHex),
354 MakeEntry(209, "io_submit", kInt, kInt, kHex),
355 MakeEntry(210, "io_cancel", kInt, kHex, kHex),
356 MakeEntry(211, "get_thread_area", kHex),
357 MakeEntry(212, "lookup_dcookie", kInt, kString, kInt),
358 MakeEntry(213, "epoll_create", kInt),
359 MakeEntry(214, "epoll_ctl_old", UnknownArguments()),
360 MakeEntry(215, "epoll_wait_old", UnknownArguments()),
361 MakeEntry(216, "remap_file_pages", kGen, kInt, kInt, kInt, kHex),
362 MakeEntry(217, "getdents64", kInt, kHex, kInt),
363 MakeEntry(218, "set_tid_address", kHex),
364 MakeEntry(219, "restart_syscall"),
365 MakeEntry(220, "semtimedop", kInt, kHex, kInt, kHex),
366 MakeEntry(221, "fadvise64", kInt, kInt, kInt, kInt),
367 MakeEntry(222, "timer_create", kInt, kHex, kHex),
368 MakeEntry(223, "timer_settime", kInt, kHex, kHex, kHex),
369 MakeEntry(224, "timer_gettime", kInt, kHex),
370 MakeEntry(225, "timer_getoverrun", kInt),
371 MakeEntry(226, "timer_delete", kInt),
372 MakeEntry(227, "clock_settime", kInt, kHex),
373 MakeEntry(228, "clock_gettime", kInt, kHex),
374 MakeEntry(229, "clock_getres", kInt, kHex),
375 MakeEntry(230, "clock_nanosleep", kInt, kHex, kHex, kHex),
376 MakeEntry(231, "exit_group", kInt),
377 MakeEntry(232, "epoll_wait", kInt, kHex, kInt, kInt),
378 MakeEntry(233, "epoll_ctl", kInt, kInt, kInt, kHex),
379 MakeEntry(234, "tgkill", kInt, kInt, kSignal),
380 MakeEntry(235, "utimes", kPath, kHex),
381 MakeEntry(236, "vserver", UnknownArguments()),
382 MakeEntry(237, "mbind", kGen, kInt, kInt, kHex, kInt, kHex),
383 MakeEntry(238, "set_mempolicy", kInt, kHex, kInt),
384 MakeEntry(239, "get_mempolicy", kInt, kHex, kInt, kInt, kHex),
385 MakeEntry(240, "mq_open", kString, kHex, kOct, kHex),
386 MakeEntry(241, "mq_unlink", kString),
387 MakeEntry(242, "mq_timedsend", kHex, kHex, kInt, kInt, kHex),
388 MakeEntry(243, "mq_timedreceive", kHex, kHex, kInt, kHex, kHex),
389 MakeEntry(244, "mq_notify", kHex, kHex),
390 MakeEntry(245, "mq_getsetattr", kHex, kHex, kHex),
391 MakeEntry(246, "kexec_load", kHex, kInt, kHex, kHex),
392 MakeEntry(247, "waitid", kInt, kInt, kHex, kInt, kHex),
393 MakeEntry(248, "add_key", kString, kString, kGen, kInt, kInt),
394 MakeEntry(249, "request_key", kString, kString, kHex, kInt),
395 MakeEntry(250, "keyctl", kInt, kInt, kInt, kInt, kInt),
396 MakeEntry(251, "ioprio_set", kInt, kInt, kInt),
397 MakeEntry(252, "ioprio_get", kInt, kInt),
398 MakeEntry(253, "inotify_init"),
399 MakeEntry(254, "inotify_add_watch", kInt, kPath, kHex),
400 MakeEntry(255, "inotify_rm_watch", kInt, kInt),
401 MakeEntry(256, "migrate_pages", kInt, kInt, kHex, kHex),
402 MakeEntry(257, "openat", kInt, kPath, kHex, kOct),
403 MakeEntry(258, "mkdirat", kInt, kPath, kOct),
404 MakeEntry(259, "mknodat", kInt, kPath, kOct, kHex),
405 MakeEntry(260, "fchownat", kInt, kPath, kInt, kInt, kHex),
406 MakeEntry(261, "futimesat", kInt, kPath, kHex),
407 MakeEntry(262, "newfstatat", kInt, kPath, kHex, kHex),
408 MakeEntry(263, "unlinkat", kInt, kPath, kHex),
409 MakeEntry(264, "renameat", kInt, kPath, kInt, kPath),
410 MakeEntry(265, "linkat", kInt, kPath, kInt, kPath, kHex),
411 MakeEntry(266, "symlinkat", kPath, kInt, kPath),
412 MakeEntry(267, "readlinkat", kInt, kPath, kHex, kInt),
413 MakeEntry(268, "fchmodat", kInt, kPath, kOct),
414 MakeEntry(269, "faccessat", kInt, kPath, kInt, kHex),
415 MakeEntry(270, "pselect6", kInt, kHex, kHex, kHex, kHex),
416 MakeEntry(271, "ppoll", kHex, kInt, kHex, kHex, kInt),
417 MakeEntry(272, "unshare", kHex),
418 MakeEntry(273, "set_robust_list", kHex, kInt),
419 MakeEntry(274, "get_robust_list", kInt, kHex, kHex),
420 MakeEntry(275, "splice", kInt, kHex, kInt, kHex, kInt, kHex),
421 MakeEntry(276, "tee", kInt, kInt, kInt, kHex),
422 MakeEntry(277, "sync_file_range", kInt, kInt, kInt, kHex),
423 MakeEntry(278, "vmsplice", kInt, kHex, kInt, kInt),
424 MakeEntry(279, "move_pages", kInt, kInt, kHex, kHex, kHex, kHex),
425 MakeEntry(280, "utimensat", kInt, kPath, kHex, kHex),
426 MakeEntry(281, "epoll_pwait", kInt, kHex, kInt, kInt, kHex, kInt),
427 MakeEntry(282, "signalfd", kInt, kHex, kHex),
428 MakeEntry(283, "timerfd_create", kInt, kHex),
429 MakeEntry(284, "eventfd", kInt),
430 MakeEntry(285, "fallocate", kInt, kOct, kInt, kInt),
431 MakeEntry(286, "timerfd_settime", kInt, kHex, kHex, kHex),
432 MakeEntry(287, "timerfd_gettime", kInt, kHex),
433 MakeEntry(288, "accept4", kInt, kHex, kHex, kInt),
434 MakeEntry(289, "signalfd4", kInt, kHex, kHex, kHex),
435 MakeEntry(290, "eventfd2", kInt, kHex),
436 MakeEntry(291, "epoll_create1", kHex),
437 MakeEntry(292, "dup3", kInt, kInt, kHex),
438 MakeEntry(293, "pipe2", kHex, kHex),
439 MakeEntry(294, "inotify_init1", kHex),
440 MakeEntry(295, "preadv", kInt, kHex, kInt, kInt, kInt),
441 MakeEntry(296, "pwritev", kInt, kHex, kInt, kInt, kInt),
442 MakeEntry(297, "rt_tgsigqueueinfo", kInt, kInt, kInt, kHex),
443 MakeEntry(298, "perf_event_open", kHex, kInt, kInt, kInt, kHex),
444 MakeEntry(299, "recvmmsg", kInt, kHex, kInt, kHex, kHex),
445 MakeEntry(300, "fanotify_init", kHex, kHex),
446 MakeEntry(301, "fanotify_mark", kInt, kHex, kHex, kInt, kPath),
447 MakeEntry(302, "prlimit64", kInt, kInt, kHex, kHex),
448 MakeEntry(303, "name_to_handle_at", kInt, kPath, kHex, kHex, kHex),
449 MakeEntry(304, "open_by_handle_at", kInt, kHex, kHex),
450 MakeEntry(305, "clock_adjtime", kInt, kHex),
451 MakeEntry(306, "syncfs", kInt),
452 MakeEntry(307, "sendmmsg", kInt, kHex, kInt, kHex),
453 MakeEntry(308, "setns", kInt, kHex),
454 MakeEntry(309, "getcpu", kHex, kHex, kHex),
455 MakeEntry(310, "process_vm_readv", kInt, kHex, kInt, kHex, kInt,
456 kInt),
457 MakeEntry(311, "process_vm_writev", kInt, kHex, kInt, kHex, kInt,
458 kInt),
459 MakeEntry(312, "kcmp", kInt, kInt, kInt, kInt, kInt),
460 MakeEntry(313, "finit_module", kInt, kString, kHex),
461 MakeEntry(314, "sched_setattr", kInt, kHex, kHex),
462 MakeEntry(315, "sched_getattr", kInt, kHex, kInt, kHex),
463 MakeEntry(316, "renameat2", kInt, kPath, kInt, kPath, kHex),
464 MakeEntry(317, "seccomp", kInt, kHex, kHex),
465 MakeEntry(318, "getrandom", kGen, kInt, kHex),
466 MakeEntry(319, "memfd_create", kString, kHex),
467 MakeEntry(320, "kexec_file_load", kInt, kInt, kInt, kString, kHex),
468 MakeEntry(321, "bpf", kInt, kHex, kInt),
469 MakeEntry(322, "execveat", kInt, kPath, kHex, kHex, kHex),
470 MakeEntry(323, "userfaultfd", kHex),
471 MakeEntry(324, "membarrier", kInt, kHex),
472 MakeEntry(325, "mlock2", kHex, kInt, kHex),
473 MakeEntry(326, "copy_file_range", kInt, kHex, kInt, kHex, kInt,
474 kHex),
475 MakeEntry(327, "preadv2", kInt, kHex, kInt, kInt, kInt, kHex),
476 MakeEntry(328, "pwritev2", kInt, kHex, kInt, kInt, kInt, kHex),
477 MakeEntry(329, "pkey_mprotect", kInt, kInt, kHex, kInt),
478 MakeEntry(330, "pkey_alloc", kInt, kInt),
479 MakeEntry(331, "pkey_free", kInt),
480 MakeEntry(332, "statx", kInt, kPath, kHex, kHex, kHex),
481 MakeEntry(333, "io_pgetevents", UnknownArguments()),
482 MakeEntry(334, "rseq", kHex, kInt, kHex, kHex),
483 MakeEntry(435, "clone3", kHex, kInt),
484 MakeEntry(436, "close_range", kInt, kInt, kHex),
485 MakeEntry(437, "openat2", kInt, kPath, kHex, kInt),
486 MakeEntry(438, "pidfd_getfd", UnknownArguments()),
487 MakeEntry(439, "faccessat2", kInt, kPath, kHex, kHex),
488 MakeEntry(440, "process_madvise", UnknownArguments()),
489 MakeEntry(441, "epoll_pwait2", UnknownArguments()),
490 MakeEntry(442, "mount_setattr", UnknownArguments()),
491 MakeEntry(443, "quotactl_fd", UnknownArguments()),
492 MakeEntry(444, "landlock_create_ruleset", UnknownArguments()),
493 MakeEntry(445, "landlock_add_rule", UnknownArguments()),
494 MakeEntry(446, "landlock_restrict_self", UnknownArguments()),
495 MakeEntry(447, "memfd_secret", UnknownArguments()),
496 MakeEntry(448, "process_mrelease", UnknownArguments()),
497 MakeEntry(449, "futex_waitv", UnknownArguments()),
498 MakeEntry(450, "set_mempolicy_home_node", UnknownArguments()),
499 MakeEntry(451, "cachestat", UnknownArguments()),
500 MakeEntry(452, "fchmodat2", kInt, kPath, kHex, kHex),
501 MakeEntry(453, "map_shadow_stack", UnknownArguments()),
502 MakeEntry(454, "futex_wake", UnknownArguments()),
503 MakeEntry(455, "futex_wait", UnknownArguments()),
504 MakeEntry(456, "futex_requeue", UnknownArguments()),
505 MakeEntry(457, "statmount", UnknownArguments()),
506 MakeEntry(458, "listmount", UnknownArguments()),
507 MakeEntry(459, "lsm_get_self_attr", UnknownArguments()),
508 MakeEntry(460, "lsm_set_self_attr", UnknownArguments()),
509 MakeEntry(461, "lsm_list_modules", UnknownArguments()),
510 // clang-format on
511 };
512
513 static_assert(IsSorted(kSyscallDataX8664, SyscallTable::Entry::BySyscallNr),
514 "Syscalls should be sorted");
515
516 constexpr std::array kSyscallDataX8632 = {
517 // clang-format off
518 MakeEntry(0, "restart_syscall"),
519 MakeEntry(1, "exit", kInt),
520 MakeEntry(2, "fork"),
521 MakeEntry(3, "read", kInt, kHex, kInt),
522 MakeEntry(4, "write", kInt, kHex, kInt),
523 MakeEntry(5, "open", kPath, kHex, kOct),
524 MakeEntry(6, "close", kInt),
525 MakeEntry(7, "waitpid", kInt, kHex, kHex),
526 MakeEntry(8, "creat", kPath, kOct),
527 MakeEntry(9, "link", kPath, kPath),
528 MakeEntry(10, "unlink", kPath),
529 MakeEntry(11, "execve", kPath, kHex, kHex),
530 MakeEntry(12, "chdir", kPath),
531 MakeEntry(13, "time", kHex),
532 MakeEntry(14, "mknod", kPath, kOct, kHex),
533 MakeEntry(15, "chmod", kPath, kOct),
534 MakeEntry(16, "lchown", kPath, kInt, kInt),
535 MakeEntry(17, "break", UnknownArguments()),
536 MakeEntry(18, "oldstat", UnknownArguments()),
537 MakeEntry(19, "lseek", kInt, kInt, kInt),
538 MakeEntry(20, "getpid"),
539 MakeEntry(21, "mount", kPath, kPath, kString, kHex, kGen),
540 MakeEntry(22, "umount", UnknownArguments()),
541 MakeEntry(23, "setuid", kInt),
542 MakeEntry(24, "getuid"),
543 MakeEntry(25, "stime", UnknownArguments()),
544 MakeEntry(26, "ptrace", kHex, kHex, kHex, kHex),
545 MakeEntry(27, "alarm", kInt),
546 MakeEntry(28, "oldfstat", UnknownArguments()),
547 MakeEntry(29, "pause"),
548 MakeEntry(30, "utime", kPath, kHex),
549 MakeEntry(31, "stty", UnknownArguments()),
550 MakeEntry(32, "gtty", UnknownArguments()),
551 MakeEntry(33, "access", kPath, kHex),
552 MakeEntry(34, "nice", UnknownArguments()),
553 MakeEntry(35, "ftime", UnknownArguments()),
554 MakeEntry(36, "sync"),
555 MakeEntry(37, "kill", kInt, kSignal),
556 MakeEntry(38, "rename", kPath, kPath),
557 MakeEntry(39, "mkdir", kPath, kOct),
558 MakeEntry(40, "rmdir", kPath),
559 MakeEntry(41, "dup", kInt),
560 MakeEntry(42, "pipe", kHex),
561 MakeEntry(43, "times", kHex),
562 MakeEntry(44, "prof", UnknownArguments()),
563 MakeEntry(45, "brk", kInt),
564 MakeEntry(46, "setgid", kInt),
565 MakeEntry(47, "getgid"),
566 MakeEntry(48, "signal", UnknownArguments()),
567 MakeEntry(49, "geteuid"),
568 MakeEntry(50, "getegid"),
569 MakeEntry(51, "acct", kPath),
570 MakeEntry(52, "umount2", kPath, kHex),
571 MakeEntry(53, "lock", UnknownArguments()),
572 MakeEntry(54, "ioctl", kInt, kInt, kHex),
573 MakeEntry(55, "fcntl", kInt, kInt, kHex),
574 MakeEntry(56, "mpx", UnknownArguments()),
575 MakeEntry(57, "setpgid", kInt, kInt),
576 MakeEntry(58, "ulimit", UnknownArguments()),
577 MakeEntry(59, "oldolduname", UnknownArguments()),
578 MakeEntry(60, "umask", kHex),
579 MakeEntry(61, "chroot", kPath),
580 MakeEntry(62, "ustat", kHex, kHex),
581 MakeEntry(63, "dup2", kInt, kInt),
582 MakeEntry(64, "getppid"),
583 MakeEntry(65, "getpgrp"),
584 MakeEntry(66, "setsid"),
585 MakeEntry(67, "sigaction", UnknownArguments()),
586 MakeEntry(68, "sgetmask", UnknownArguments()),
587 MakeEntry(69, "ssetmask", UnknownArguments()),
588 MakeEntry(70, "setreuid", kInt, kInt),
589 MakeEntry(71, "setregid", kInt, kInt),
590 MakeEntry(72, "sigsuspend", UnknownArguments()),
591 MakeEntry(73, "sigpending", UnknownArguments()),
592 MakeEntry(74, "sethostname", kString, kInt),
593 MakeEntry(75, "setrlimit", kInt, kHex),
594 MakeEntry(76, "getrlimit", kInt, kHex),
595 MakeEntry(77, "getrusage", kInt, kHex),
596 MakeEntry(78, "gettimeofday", kHex, kHex),
597 MakeEntry(79, "settimeofday", kHex, kHex),
598 MakeEntry(80, "getgroups", kInt, kHex),
599 MakeEntry(81, "setgroups", kInt, kHex),
600 MakeEntry(82, "select", kInt, kHex, kHex, kHex, kHex),
601 MakeEntry(83, "symlink", kPath, kPath),
602 MakeEntry(84, "oldlstat", UnknownArguments()),
603 MakeEntry(85, "readlink", kPath, kHex, kInt),
604 MakeEntry(86, "uselib", kPath),
605 MakeEntry(87, "swapon", kPath, kHex),
606 MakeEntry(88, "reboot", kInt, kHex, kHex, kGen),
607 MakeEntry(89, "readdir", UnknownArguments()),
608 MakeEntry(90, "mmap", kHex, kInt, kHex, kHex, kInt, kInt),
609 MakeEntry(91, "munmap", kHex, kInt),
610 MakeEntry(92, "truncate", kPath, kInt),
611 MakeEntry(93, "ftruncate", kInt, kInt),
612 MakeEntry(94, "fchmod", kInt, kOct),
613 MakeEntry(95, "fchown", kInt, kInt, kInt),
614 MakeEntry(96, "getpriority", kInt, kInt),
615 MakeEntry(97, "setpriority", kInt, kInt, kInt),
616 MakeEntry(98, "profil", UnknownArguments()),
617 MakeEntry(99, "statfs", kPath, kHex),
618 MakeEntry(100, "fstatfs", kInt, kHex),
619 MakeEntry(101, "ioperm", kInt, kInt, kInt),
620 MakeEntry(102, "socketcall", UnknownArguments()),
621 MakeEntry(103, "syslog", kInt, kHex, kInt),
622 MakeEntry(104, "setitimer", kInt, kHex, kHex),
623 MakeEntry(105, "getitimer", kInt, kHex),
624 MakeEntry(106, "stat", kPath, kHex),
625 MakeEntry(107, "lstat", kPath, kHex),
626 MakeEntry(108, "fstat", kInt, kHex),
627 MakeEntry(109, "olduname", UnknownArguments()),
628 MakeEntry(110, "iopl", kInt),
629 MakeEntry(111, "vhangup"),
630 MakeEntry(112, "idle", UnknownArguments()),
631 MakeEntry(113, "vm86old", UnknownArguments()),
632 MakeEntry(114, "wait4", kInt, kHex, kHex, kHex),
633 MakeEntry(115, "swapoff", kPath),
634 MakeEntry(116, "sysinfo", kHex),
635 MakeEntry(117, "ipc", UnknownArguments()),
636 MakeEntry(118, "fsync", kInt),
637 MakeEntry(119, "sigreturn", UnknownArguments()),
638 MakeEntry(120, "clone", kCloneFlag, kHex, kHex, kHex, kHex),
639 MakeEntry(121, "setdomainname", kString, kInt),
640 MakeEntry(122, "uname", kInt),
641 MakeEntry(123, "modify_ldt", kInt, kHex, kInt),
642 MakeEntry(124, "adjtimex", kHex),
643 MakeEntry(125, "mprotect", kHex, kInt, kHex),
644 MakeEntry(126, "sigprocmask", UnknownArguments()),
645 MakeEntry(127, "create_module", kString, kInt),
646 MakeEntry(128, "init_module", kGen, kInt, kString),
647 MakeEntry(129, "delete_module", kString, kHex),
648 MakeEntry(130, "get_kernel_syms", kHex),
649 MakeEntry(131, "quotactl", kInt, kPath, kInt, kGen),
650 MakeEntry(132, "getpgid", kInt),
651 MakeEntry(133, "fchdir", kInt),
652 MakeEntry(134, "bdflush", UnknownArguments()),
653 MakeEntry(135, "sysfs", kInt, kInt, kInt),
654 MakeEntry(136, "personality", kHex),
655 MakeEntry(137, "afs_syscall", UnknownArguments()),
656 MakeEntry(138, "setfsuid", kInt),
657 MakeEntry(139, "setfsgid", kInt),
658 MakeEntry(140, "_llseek", UnknownArguments()),
659 MakeEntry(141, "getdents", kInt, kHex, kInt),
660 MakeEntry(142, "_newselect", UnknownArguments()),
661 MakeEntry(143, "flock", kInt, kInt),
662 MakeEntry(144, "msync", kHex, kInt, kInt),
663 MakeEntry(145, "readv", kInt, kHex, kInt),
664 MakeEntry(146, "writev", kInt, kHex, kInt),
665 MakeEntry(147, "getsid", kInt),
666 MakeEntry(148, "fdatasync", kInt),
667 MakeEntry(149, "_sysctl", kHex),
668 MakeEntry(150, "mlock", kInt, kInt),
669 MakeEntry(151, "munlock", kInt, kInt),
670 MakeEntry(152, "mlockall", kHex),
671 MakeEntry(153, "munlockall"),
672 MakeEntry(154, "sched_setparam", kInt, kHex),
673 MakeEntry(155, "sched_getparam", kInt, kHex),
674 MakeEntry(156, "sched_setscheduler", kInt, kInt, kHex),
675 MakeEntry(157, "sched_getscheduler", kInt),
676 MakeEntry(158, "sched_yield"),
677 MakeEntry(159, "sched_get_priority_max", kHex),
678 MakeEntry(160, "sched_get_priority_min", kHex),
679 MakeEntry(161, "sched_rr_get_interval", kInt, kHex),
680 MakeEntry(162, "nanosleep", kHex, kHex),
681 MakeEntry(163, "mremap", kHex, kInt, kInt, kInt, kHex),
682 MakeEntry(164, "setresuid", kInt, kInt, kInt),
683 MakeEntry(165, "getresuid", kHex, kHex, kHex),
684 MakeEntry(166, "vm86", UnknownArguments()),
685 MakeEntry(167, "query_module", kString, kInt, kGen, kInt, kGen),
686 MakeEntry(168, "poll", kGen, kInt, kInt),
687 MakeEntry(169, "nfsservctl", kInt, kGen, kGen),
688 MakeEntry(170, "setresgid", kInt, kInt, kInt),
689 MakeEntry(171, "getresgid", kHex, kHex, kHex),
690 MakeEntry(172, "prctl", kInt, kHex, kHex, kHex, kHex),
691 MakeEntry(173, "rt_sigreturn"),
692 MakeEntry(174, "rt_sigaction", kSignal, kHex, kHex, kInt),
693 MakeEntry(175, "rt_sigprocmask", kInt, kHex, kHex, kInt),
694 MakeEntry(176, "rt_sigpending", kHex, kInt),
695 MakeEntry(177, "rt_sigtimedwait", kHex, kHex, kHex, kInt),
696 MakeEntry(178, "rt_sigqueueinfo", kInt, kSignal, kHex),
697 MakeEntry(179, "rt_sigsuspend", kHex, kInt),
698 MakeEntry(180, "pread64", kInt, kHex, kInt, kInt),
699 MakeEntry(181, "pwrite64", kInt, kHex, kInt, kInt),
700 MakeEntry(182, "chown", kPath, kInt, kInt),
701 MakeEntry(183, "getcwd", kHex, kInt),
702 MakeEntry(184, "capget", kHex, kHex),
703 MakeEntry(185, "capset", kHex, kHex),
704 MakeEntry(186, "sigaltstack", kHex, kHex),
705 MakeEntry(187, "sendfile", kInt, kInt, kHex, kInt),
706 MakeEntry(188, "getpmsg", UnknownArguments()),
707 MakeEntry(189, "putpmsg", UnknownArguments()),
708 MakeEntry(190, "vfork"),
709 MakeEntry(191, "ugetrlimit", UnknownArguments()),
710 MakeEntry(192, "mmap2", UnknownArguments()),
711 MakeEntry(193, "truncate64", kPath, kHex),
712 MakeEntry(194, "ftruncate64", kInt, kHex),
713 MakeEntry(195, "stat64", kPath, kHex),
714 MakeEntry(196, "lstat64", kPath, kHex),
715 MakeEntry(197, "fstat64", kInt, kHex),
716 MakeEntry(198, "lchown32", kPath, kInt, kInt),
717 MakeEntry(199, "getuid32", UnknownArguments()),
718 MakeEntry(200, "getgid32", UnknownArguments()),
719 MakeEntry(201, "geteuid32", UnknownArguments()),
720 MakeEntry(202, "getegid32", UnknownArguments()),
721 MakeEntry(203, "setreuid32", UnknownArguments()),
722 MakeEntry(204, "setregid32", UnknownArguments()),
723 MakeEntry(205, "getgroups32", UnknownArguments()),
724 MakeEntry(206, "setgroups32", UnknownArguments()),
725 MakeEntry(207, "fchown32", UnknownArguments()),
726 MakeEntry(208, "setresuid32", UnknownArguments()),
727 MakeEntry(209, "getresuid32", UnknownArguments()),
728 MakeEntry(210, "setresgid32", UnknownArguments()),
729 MakeEntry(211, "getresgid32", UnknownArguments()),
730 MakeEntry(212, "chown32", UnknownArguments()),
731 MakeEntry(213, "setuid32", UnknownArguments()),
732 MakeEntry(214, "setgid32", UnknownArguments()),
733 MakeEntry(215, "setfsuid32", UnknownArguments()),
734 MakeEntry(216, "setfsgid32", UnknownArguments()),
735 MakeEntry(217, "pivot_root", kPath, kPath),
736 MakeEntry(218, "mincore", kHex, kInt, kHex),
737 MakeEntry(219, "madvise", kHex, kInt, kInt),
738 MakeEntry(220, "getdents64", kInt, kHex, kInt),
739 MakeEntry(221, "fcntl64", UnknownArguments()),
740 MakeEntry(222, "unused1-222", UnknownArguments()),
741 MakeEntry(223, "unused2-223", UnknownArguments()),
742 MakeEntry(224, "gettid"),
743 MakeEntry(225, "readahead", kInt, kInt, kInt),
744 MakeEntry(226, "setxattr", kPath, kString, kGen, kInt, kHex),
745 MakeEntry(227, "lsetxattr", kPath, kString, kGen, kInt, kHex),
746 MakeEntry(228, "fsetxattr", kInt, kString, kGen, kInt, kHex),
747 MakeEntry(229, "getxattr", kPath, kString, kGen, kInt),
748 MakeEntry(230, "lgetxattr", kPath, kString, kGen, kInt),
749 MakeEntry(231, "fgetxattr", kInt, kString, kGen, kInt),
750 MakeEntry(232, "listxattr", kPath, kGen, kInt),
751 MakeEntry(233, "llistxattr", kPath, kGen, kInt),
752 MakeEntry(234, "flistxattr", kInt, kGen, kInt),
753 MakeEntry(235, "removexattr", kPath, kString),
754 MakeEntry(236, "lremovexattr", kPath, kString),
755 MakeEntry(237, "fremovexattr", kInt, kString),
756 MakeEntry(238, "tkill", kInt, kSignal),
757 MakeEntry(239, "sendfile64", UnknownArguments()),
758 MakeEntry(240, "futex", kGen, kInt, kInt, kGen, kGen, kInt),
759 MakeEntry(241, "sched_setaffinity", kInt, kInt, kHex),
760 MakeEntry(242, "sched_getaffinity", kInt, kInt, kHex),
761 MakeEntry(243, "set_thread_area", kHex),
762 MakeEntry(244, "get_thread_area", kHex),
763 MakeEntry(245, "io_setup", kInt, kHex),
764 MakeEntry(246, "io_destroy", kInt),
765 MakeEntry(247, "io_getevents", kInt, kInt, kInt, kHex, kHex),
766 MakeEntry(248, "io_submit", kInt, kInt, kHex),
767 MakeEntry(249, "io_cancel", kInt, kHex, kHex),
768 MakeEntry(250, "fadvise64", kInt, kInt, kInt, kInt),
769 MakeEntry(251, "251-old_sys_set_zone_reclaim", UnknownArguments()),
770 MakeEntry(252, "exit_group", kInt),
771 MakeEntry(253, "lookup_dcookie", kInt, kString, kInt),
772 MakeEntry(254, "epoll_create", kInt),
773 MakeEntry(255, "epoll_ctl", kInt, kInt, kInt, kHex),
774 MakeEntry(256, "epoll_wait", kInt, kHex, kInt, kInt),
775 MakeEntry(257, "remap_file_pages", kGen, kInt, kInt, kInt, kHex),
776 MakeEntry(258, "set_tid_address", kHex),
777 MakeEntry(259, "timer_create", kInt, kHex, kHex),
778 MakeEntry(260, "timer_settime", kInt, kHex, kHex, kHex),
779 MakeEntry(261, "timer_gettime", kInt, kHex),
780 MakeEntry(262, "timer_getoverrun", kInt),
781 MakeEntry(263, "timer_delete", kInt),
782 MakeEntry(264, "clock_settime", kInt, kHex),
783 MakeEntry(265, "clock_gettime", kInt, kHex),
784 MakeEntry(266, "clock_getres", kInt, kHex),
785 MakeEntry(267, "clock_nanosleep", kInt, kHex, kHex, kHex),
786 MakeEntry(268, "statfs64", UnknownArguments()),
787 MakeEntry(269, "fstatfs64", UnknownArguments()),
788 MakeEntry(270, "tgkill", kInt, kInt, kSignal),
789 MakeEntry(271, "utimes", kPath, kHex),
790 MakeEntry(272, "fadvise64_64", UnknownArguments()),
791 MakeEntry(273, "vserver", UnknownArguments()),
792 MakeEntry(274, "mbind", kGen, kInt, kInt, kHex, kInt, kHex),
793 MakeEntry(275, "get_mempolicy", kInt, kHex, kInt, kInt, kHex),
794 MakeEntry(276, "set_mempolicy", kInt, kHex, kInt),
795 MakeEntry(277, "mq_open", kString, kHex, kOct, kHex),
796 MakeEntry(278, "mq_unlink", kString),
797 MakeEntry(279, "mq_timedsend", kHex, kHex, kInt, kInt, kHex),
798 MakeEntry(280, "mq_timedreceive", kHex, kHex, kInt, kHex, kHex),
799 MakeEntry(281, "mq_notify", kHex, kHex),
800 MakeEntry(282, "mq_getsetattr", kHex, kHex, kHex),
801 MakeEntry(283, "kexec_load", kHex, kInt, kHex, kHex),
802 MakeEntry(284, "waitid", kInt, kInt, kHex, kInt, kHex),
803 MakeEntry(285, "285-old_sys_setaltroot", UnknownArguments()),
804 MakeEntry(286, "add_key", kString, kString, kGen, kInt, kInt),
805 MakeEntry(287, "request_key", kString, kString, kHex, kInt),
806 MakeEntry(288, "keyctl", kInt, kInt, kInt, kInt, kInt),
807 MakeEntry(289, "ioprio_set", kInt, kInt, kInt),
808 MakeEntry(290, "ioprio_get", kInt, kInt),
809 MakeEntry(291, "inotify_init"),
810 MakeEntry(292, "inotify_add_watch", kInt, kPath, kHex),
811 MakeEntry(293, "inotify_rm_watch", kInt, kInt),
812 MakeEntry(294, "migrate_pages", kInt, kInt, kHex, kHex),
813 MakeEntry(295, "openat", kInt, kPath, kOct),
814 MakeEntry(296, "mkdirat", kInt, kPath, kOct),
815 MakeEntry(297, "mknodat", kInt, kPath, kOct, kHex),
816 MakeEntry(298, "fchownat", kInt, kPath, kInt, kInt, kHex),
817 MakeEntry(299, "futimesat", kInt, kPath, kHex),
818 MakeEntry(300, "fstatat64", UnknownArguments()),
819 MakeEntry(301, "unlinkat", kInt, kPath, kHex),
820 MakeEntry(302, "renameat", kInt, kPath, kInt, kPath),
821 MakeEntry(303, "linkat", kInt, kPath, kInt, kPath, kHex),
822 MakeEntry(304, "symlinkat", kPath, kInt, kPath),
823 MakeEntry(305, "readlinkat", kInt, kPath, kHex, kInt),
824 MakeEntry(306, "fchmodat", kInt, kPath, kOct, kHex),
825 MakeEntry(307, "faccessat", kInt, kPath, kHex, kHex),
826 MakeEntry(308, "pselect6", kInt, kHex, kHex, kHex, kHex),
827 MakeEntry(309, "ppoll", kHex, kInt, kHex, kHex, kInt),
828 MakeEntry(310, "unshare", kHex),
829 MakeEntry(311, "set_robust_list", kHex, kInt),
830 MakeEntry(312, "get_robust_list", kInt, kHex, kHex),
831 MakeEntry(313, "splice", kInt, kHex, kInt, kHex, kInt, kHex),
832 MakeEntry(314, "sync_file_range", kInt, kInt, kInt, kHex),
833 MakeEntry(315, "tee", kInt, kInt, kInt, kHex),
834 MakeEntry(316, "vmsplice", kInt, kHex, kInt, kInt),
835 MakeEntry(317, "move_pages", kInt, kInt, kHex, kHex, kHex, kHex),
836 MakeEntry(318, "getcpu", kHex, kHex, kHex),
837 MakeEntry(319, "epoll_pwait", kInt, kHex, kInt, kInt, kHex, kInt),
838 MakeEntry(320, "utimensat", kInt, kPath, kHex, kHex),
839 MakeEntry(321, "signalfd", kInt, kHex, kHex),
840 MakeEntry(322, "timerfd_create", kInt, kHex),
841 MakeEntry(323, "eventfd", kInt),
842 MakeEntry(324, "fallocate", kInt, kOct, kInt, kInt),
843 MakeEntry(325, "timerfd_settime", kInt, kHex, kHex, kHex),
844 MakeEntry(326, "timerfd_gettime", kInt, kHex),
845 MakeEntry(327, "signalfd4", kInt, kHex, kHex, kHex),
846 MakeEntry(328, "eventfd2", kInt, kHex),
847 MakeEntry(329, "epoll_create1", kHex),
848 MakeEntry(330, "dup3", kInt, kInt, kHex),
849 MakeEntry(331, "pipe2", kHex, kHex),
850 MakeEntry(332, "inotify_init1", kHex),
851 MakeEntry(333, "preadv", kInt, kHex, kInt, kInt, kInt),
852 MakeEntry(334, "pwritev", kInt, kHex, kInt, kInt, kInt),
853 MakeEntry(335, "rt_tgsigqueueinfo", kInt, kInt, kInt, kHex),
854 MakeEntry(336, "perf_event_open", kHex, kInt, kInt, kInt, kHex),
855 MakeEntry(337, "recvmmsg", kInt, kHex, kInt, kHex, kHex),
856 MakeEntry(338, "fanotify_init", kHex, kHex),
857 MakeEntry(339, "fanotify_mark", kInt, kHex, kHex, kInt, kPath),
858 MakeEntry(340, "prlimit64", kInt, kInt, kHex, kHex),
859 MakeEntry(341, "name_to_handle_at", kInt, kPath, kHex, kHex, kHex),
860 MakeEntry(342, "open_by_handle_at", kInt, kHex, kHex),
861 MakeEntry(343, "clock_adjtime", kInt, kHex),
862 MakeEntry(344, "syncfs", kInt),
863 MakeEntry(345, "sendmmsg", kInt, kHex, kInt, kHex),
864 MakeEntry(346, "setns", kInt, kHex),
865 MakeEntry(347, "process_vm_readv", kInt, kHex, kInt, kHex, kInt, kInt),
866 MakeEntry(348, "process_vm_writev", kInt, kHex, kInt, kHex, kInt, kInt),
867 MakeEntry(349, "kcmp", kInt, kInt, kInt, kInt, kInt),
868 MakeEntry(350, "finit_module", kInt, kString, kHex),
869 MakeEntry(351, "sched_setattr", kInt, kHex, kHex),
870 MakeEntry(352, "sched_getattr", kInt, kHex, kInt, kHex),
871 MakeEntry(353, "renameat2", kHex, kPath, kHex, kPath, kHex, kHex),
872 MakeEntry(354, "seccomp", kInt, kHex, kHex),
873 MakeEntry(355, "getrandom", kGen, kInt, kHex),
874 MakeEntry(356, "memfd_create", kString, kHex),
875 MakeEntry(357, "bpf", kInt, kHex, kInt),
876 MakeEntry(435, "clone3", kHex, kInt),
877 MakeEntry(436, "close_range", kInt, kInt, kHex),
878 MakeEntry(437, "openat2", kInt, kPath, kHex, kInt),
879 MakeEntry(438, "pidfd_getfd", UnknownArguments()),
880 MakeEntry(439, "faccessat2", kInt, kPath, kHex, kHex),
881 MakeEntry(440, "process_madvise", UnknownArguments()),
882 MakeEntry(441, "epoll_pwait2", UnknownArguments()),
883 MakeEntry(442, "mount_setattr", UnknownArguments()),
884 MakeEntry(443, "quotactl_fd", UnknownArguments()),
885 MakeEntry(444, "landlock_create_ruleset", UnknownArguments()),
886 MakeEntry(445, "landlock_add_rule", UnknownArguments()),
887 MakeEntry(446, "landlock_restrict_self", UnknownArguments()),
888 MakeEntry(447, "memfd_secret", UnknownArguments()),
889 MakeEntry(448, "process_mrelease", UnknownArguments()),
890 MakeEntry(449, "futex_waitv", UnknownArguments()),
891 MakeEntry(450, "set_mempolicy_home_node", UnknownArguments()),
892 MakeEntry(451, "cachestat", UnknownArguments()),
893 MakeEntry(452, "fchmodat2", kInt, kPath, kHex, kHex),
894 MakeEntry(453, "map_shadow_stack", UnknownArguments()),
895 MakeEntry(454, "futex_wake", UnknownArguments()),
896 MakeEntry(455, "futex_wait", UnknownArguments()),
897 MakeEntry(456, "futex_requeue", UnknownArguments()),
898 MakeEntry(457, "statmount", UnknownArguments()),
899 MakeEntry(458, "listmount", UnknownArguments()),
900 MakeEntry(459, "lsm_get_self_attr", UnknownArguments()),
901 MakeEntry(460, "lsm_set_self_attr", UnknownArguments()),
902 MakeEntry(461, "lsm_list_modules", UnknownArguments()),
903 // clang-format on
904 };
905
906 static_assert(IsSorted(kSyscallDataX8632, SyscallTable::Entry::BySyscallNr),
907 "Syscalls should be sorted");
908
909 // http://lxr.free-electrons.com/source/arch/powerpc/include/uapi/asm/unistd.h
910 // Note: PPC64 syscalls can have up to 7 register arguments, but nobody is
911 // using the 7th argument - probably for x64 compatibility reasons.
912 constexpr std::array kSyscallDataPPC64LE = {
913 // clang-format off
914 MakeEntry(0, "restart_syscall"),
915 MakeEntry(1, "exit", kInt),
916 MakeEntry(2, "fork"),
917 MakeEntry(3, "read", kInt, kHex, kInt),
918 MakeEntry(4, "write", kInt, kHex, kInt),
919 MakeEntry(5, "open", kPath, kHex, kOct),
920 MakeEntry(6, "close", kInt),
921 MakeEntry(7, "waitpid", kInt, kHex, kHex),
922 MakeEntry(8, "creat", kPath, kOct),
923 MakeEntry(9, "link", kPath, kPath),
924 MakeEntry(10, "unlink", kPath),
925 MakeEntry(11, "execve", kPath, kHex, kHex),
926 MakeEntry(12, "chdir", kPath),
927 MakeEntry(13, "time", kHex),
928 MakeEntry(14, "mknod", kPath, kOct, kHex),
929 MakeEntry(15, "chmod", kPath, kOct),
930 MakeEntry(16, "lchown", kPath, kInt, kInt),
931 MakeEntry(17, "break", UnknownArguments()),
932 MakeEntry(18, "oldstat", UnknownArguments()),
933 MakeEntry(19, "lseek", kInt, kInt, kInt),
934 MakeEntry(20, "getpid"),
935 MakeEntry(21, "mount", kPath, kPath, kString, kHex, kGen),
936 MakeEntry(22, "umount", UnknownArguments()),
937 MakeEntry(23, "setuid", kInt),
938 MakeEntry(24, "getuid"),
939 MakeEntry(25, "stime", UnknownArguments()),
940 MakeEntry(26, "ptrace", kInt, kInt, kHex, kHex),
941 MakeEntry(27, "alarm", kInt),
942 MakeEntry(28, "oldfstat", UnknownArguments()),
943 MakeEntry(29, "pause"),
944 MakeEntry(30, "utime", kPath, kHex),
945 MakeEntry(31, "stty", UnknownArguments()),
946 MakeEntry(32, "gtty", UnknownArguments()),
947 MakeEntry(33, "access", kPath, kOct),
948 MakeEntry(34, "nice", UnknownArguments()),
949 MakeEntry(35, "ftime", UnknownArguments()),
950 MakeEntry(36, "sync"),
951 MakeEntry(37, "kill", kInt, kSignal),
952 MakeEntry(38, "rename", kPath, kPath),
953 MakeEntry(39, "mkdir", kPath, kOct),
954 MakeEntry(40, "rmdir", kPath),
955 MakeEntry(41, "dup", kInt),
956 MakeEntry(42, "pipe", kHex),
957 MakeEntry(43, "times", kHex),
958 MakeEntry(44, "prof", UnknownArguments()),
959 MakeEntry(45, "brk", kInt),
960 MakeEntry(46, "setgid", kInt),
961 MakeEntry(47, "getgid"),
962 MakeEntry(48, "signal", UnknownArguments()),
963 MakeEntry(49, "geteuid"),
964 MakeEntry(50, "getegid"),
965 MakeEntry(51, "acct", kPath),
966 MakeEntry(52, "umount2", kPath, kHex),
967 MakeEntry(53, "lock", UnknownArguments()),
968 MakeEntry(54, "ioctl", kInt, kInt, kHex),
969 MakeEntry(55, "fcntl", kInt, kInt, kHex),
970 MakeEntry(56, "mpx", UnknownArguments()),
971 MakeEntry(57, "setpgid", kInt, kInt),
972 MakeEntry(58, "ulimit", UnknownArguments()),
973 MakeEntry(59, "oldolduname", UnknownArguments()),
974 MakeEntry(60, "umask", kHex),
975 MakeEntry(61, "chroot", kPath),
976 MakeEntry(62, "ustat", kHex, kHex),
977 MakeEntry(63, "dup2", kInt, kInt),
978 MakeEntry(64, "getppid"),
979 MakeEntry(65, "getpgrp"),
980 MakeEntry(66, "setsid"),
981 MakeEntry(67, "sigaction", UnknownArguments()),
982 MakeEntry(68, "sgetmask", UnknownArguments()),
983 MakeEntry(69, "ssetmask", UnknownArguments()),
984 MakeEntry(70, "setreuid", kInt, kInt),
985 MakeEntry(71, "setregid", kInt, kInt),
986 MakeEntry(72, "sigsuspend", UnknownArguments()),
987 MakeEntry(73, "sigpending", UnknownArguments()),
988 MakeEntry(74, "sethostname", kString, kInt),
989 MakeEntry(75, "setrlimit", kInt, kHex),
990 MakeEntry(76, "getrlimit", kInt, kHex),
991 MakeEntry(77, "getrusage", kInt, kHex),
992 MakeEntry(78, "gettimeofday", kHex, kHex),
993 MakeEntry(79, "settimeofday", kHex, kHex),
994 MakeEntry(80, "getgroups", kInt, kHex),
995 MakeEntry(81, "setgroups", kInt, kHex),
996 MakeEntry(82, "select", kInt, kHex, kHex, kHex, kHex),
997 MakeEntry(83, "symlink", kPath, kPath),
998 MakeEntry(84, "oldlstat", UnknownArguments()),
999 MakeEntry(85, "readlink", kPath, kHex, kInt),
1000 MakeEntry(86, "uselib", kPath),
1001 MakeEntry(87, "swapon", kPath, kHex),
1002 MakeEntry(88, "reboot", kInt, kHex, kHex, kGen),
1003 MakeEntry(89, "readdir", UnknownArguments()),
1004 MakeEntry(90, "mmap", kHex, kInt, kHex, kHex, kInt, kInt),
1005 MakeEntry(91, "munmap", kHex, kInt),
1006 MakeEntry(92, "truncate", kPath, kInt),
1007 MakeEntry(93, "ftruncate", kInt, kInt),
1008 MakeEntry(94, "fchmod", kInt, kOct),
1009 MakeEntry(95, "fchown", kInt, kInt, kInt),
1010 MakeEntry(96, "getpriority", kInt, kInt),
1011 MakeEntry(97, "setpriority", kInt, kInt, kInt),
1012 MakeEntry(98, "profil", UnknownArguments()),
1013 MakeEntry(99, "statfs", kPath, kHex),
1014 MakeEntry(100, "fstatfs", kInt, kHex),
1015 MakeEntry(101, "ioperm", kInt, kInt, kInt),
1016 MakeEntry(102, "socketcall", UnknownArguments()),
1017 MakeEntry(103, "syslog", kInt, kHex, kInt),
1018 MakeEntry(104, "setitimer", kInt, kHex, kHex),
1019 MakeEntry(105, "getitimer", kInt, kHex),
1020 MakeEntry(106, "stat", kPath, kGen),
1021 MakeEntry(107, "lstat", kPath, kGen),
1022 MakeEntry(108, "fstat", kInt, kHex),
1023 MakeEntry(109, "olduname", UnknownArguments()),
1024 MakeEntry(110, "iopl", kInt),
1025 MakeEntry(111, "vhangup"),
1026 MakeEntry(112, "idle", UnknownArguments()),
1027 MakeEntry(113, "vm86", UnknownArguments()),
1028 MakeEntry(114, "wait4", kInt, kHex, kHex, kHex),
1029 MakeEntry(115, "swapoff", kPath),
1030 MakeEntry(116, "sysinfo", kHex),
1031 MakeEntry(117, "ipc", UnknownArguments()),
1032 MakeEntry(118, "fsync", kInt),
1033 MakeEntry(119, "sigreturn", UnknownArguments()),
1034 MakeEntry(120, "clone", kCloneFlag, kHex, kHex, kHex, kHex),
1035 MakeEntry(121, "setdomainname", kString, kInt),
1036 MakeEntry(122, "uname", kInt),
1037 MakeEntry(123, "modify_ldt", kInt, kHex, kInt),
1038 MakeEntry(124, "adjtimex", kHex),
1039 MakeEntry(125, "mprotect", kHex, kInt, kHex),
1040 MakeEntry(126, "sigprocmask", UnknownArguments()),
1041 MakeEntry(127, "create_module", kString, kInt),
1042 MakeEntry(128, "init_module", kGen, kInt, kString),
1043 MakeEntry(129, "delete_module", kString, kHex),
1044 MakeEntry(130, "get_kernel_syms", kHex),
1045 MakeEntry(131, "quotactl", kInt, kPath, kInt, kGen),
1046 MakeEntry(132, "getpgid", kInt),
1047 MakeEntry(133, "fchdir", kInt),
1048 MakeEntry(134, "bdflush", UnknownArguments()),
1049 MakeEntry(135, "sysfs", kInt, kInt, kInt),
1050 MakeEntry(136, "personality", kHex),
1051 MakeEntry(137, "afs_syscall", UnknownArguments()),
1052 MakeEntry(138, "setfsuid", kInt),
1053 MakeEntry(139, "setfsgid", kInt),
1054 MakeEntry(140, "_llseek", UnknownArguments()),
1055 MakeEntry(141, "getdents", kInt, kHex, kInt),
1056 MakeEntry(142, "_newselect", UnknownArguments()),
1057 MakeEntry(143, "flock", kInt, kInt),
1058 MakeEntry(144, "msync", kHex, kInt, kInt),
1059 MakeEntry(145, "readv", kInt, kHex, kInt),
1060 MakeEntry(146, "writev", kInt, kHex, kInt),
1061 MakeEntry(147, "getsid", kInt),
1062 MakeEntry(148, "fdatasync", kInt),
1063 MakeEntry(149, "_sysctl", kHex),
1064 MakeEntry(150, "mlock", kInt, kInt),
1065 MakeEntry(151, "munlock", kInt, kInt),
1066 MakeEntry(152, "mlockall", kHex),
1067 MakeEntry(153, "munlockall"),
1068 MakeEntry(154, "sched_setparam", kInt, kHex),
1069 MakeEntry(155, "sched_getparam", kInt, kHex),
1070 MakeEntry(156, "sched_setscheduler", kInt, kInt, kHex),
1071 MakeEntry(157, "sched_getscheduler", kInt),
1072 MakeEntry(158, "sched_yield"),
1073 MakeEntry(159, "sched_get_priority_max", kInt),
1074 MakeEntry(160, "sched_get_priority_min", kInt),
1075 MakeEntry(161, "sched_rr_get_interval", kInt, kHex),
1076 MakeEntry(162, "nanosleep", kHex, kHex),
1077 MakeEntry(163, "mremap", kHex, kInt, kInt, kInt, kHex),
1078 MakeEntry(164, "setresuid", kInt, kInt, kInt),
1079 MakeEntry(165, "getresuid", kHex, kHex, kHex),
1080 MakeEntry(166, "query_module", kString, kInt, kGen, kInt, kGen),
1081 MakeEntry(167, "poll", kGen, kInt, kInt),
1082 MakeEntry(168, "nfsservctl", kInt, kGen, kGen),
1083 MakeEntry(169, "setresgid", kInt, kInt, kInt),
1084 MakeEntry(170, "getresgid", kHex, kHex, kHex),
1085 MakeEntry(171, "prctl", kInt, kHex, kHex, kHex, kHex),
1086 MakeEntry(172, "rt_sigreturn"),
1087 MakeEntry(173, "rt_sigaction", kSignal, kHex, kHex, kInt),
1088 MakeEntry(174, "rt_sigprocmask", kInt, kHex, kHex, kInt),
1089 MakeEntry(175, "rt_sigpending", kHex, kInt),
1090 MakeEntry(176, "rt_sigtimedwait", kHex, kHex, kHex, kInt),
1091 MakeEntry(177, "rt_sigqueueinfo", kInt, kSignal, kHex),
1092 MakeEntry(178, "rt_sigsuspend", kHex, kInt),
1093 MakeEntry(179, "pread64", kInt, kHex, kInt, kInt),
1094 MakeEntry(180, "pwrite64", kInt, kHex, kInt, kInt),
1095 MakeEntry(181, "chown", kPath, kInt, kInt),
1096 MakeEntry(182, "getcwd", kHex, kInt),
1097 MakeEntry(183, "capget", kHex, kHex),
1098 MakeEntry(184, "capset", kHex, kHex),
1099 MakeEntry(185, "sigaltstack", kHex, kHex),
1100 MakeEntry(186, "sendfile", kInt, kInt, kHex, kInt),
1101 MakeEntry(187, "getpmsg", UnknownArguments()),
1102 MakeEntry(188, "putpmsg", UnknownArguments()),
1103 MakeEntry(189, "vfork"),
1104 MakeEntry(190, "ugetrlimit", UnknownArguments()),
1105 MakeEntry(191, "readahead", kInt, kInt, kInt),
1106 MakeEntry(192, "mmap2", UnknownArguments()),
1107 MakeEntry(193, "truncate64", UnknownArguments()),
1108 MakeEntry(194, "ftruncate64", UnknownArguments()),
1109 MakeEntry(195, "stat64", UnknownArguments()),
1110 MakeEntry(196, "lstat64", UnknownArguments()),
1111 MakeEntry(197, "fstat64", UnknownArguments()),
1112 MakeEntry(198, "pciconfig_read", UnknownArguments()),
1113 MakeEntry(199, "pciconfig_write", UnknownArguments()),
1114 MakeEntry(200, "pciconfig_iobase", UnknownArguments()),
1115 MakeEntry(201, "multiplexer", UnknownArguments()),
1116 MakeEntry(202, "getdents64", kInt, kHex, kInt),
1117 MakeEntry(203, "pivot_root", kPath, kPath),
1118 MakeEntry(204, "fcntl64", UnknownArguments()),
1119 MakeEntry(205, "madvise", kHex, kInt, kInt),
1120 MakeEntry(206, "mincore", kHex, kInt, kHex),
1121 MakeEntry(207, "gettid"),
1122 MakeEntry(208, "tkill", kInt, kSignal),
1123 MakeEntry(209, "setxattr", kPath, kString, kGen, kInt, kHex),
1124 MakeEntry(210, "lsetxattr", kPath, kString, kGen, kInt, kHex),
1125 MakeEntry(211, "fsetxattr", kInt, kString, kGen, kInt, kHex),
1126 MakeEntry(212, "getxattr", kPath, kString, kGen, kInt),
1127 MakeEntry(213, "lgetxattr", kPath, kString, kGen, kInt),
1128 MakeEntry(214, "fgetxattr", kInt, kString, kGen, kInt),
1129 MakeEntry(215, "listxattr", kPath, kGen, kInt),
1130 MakeEntry(216, "llistxattr", kPath, kGen, kInt),
1131 MakeEntry(217, "flistxattr", kInt, kGen, kInt),
1132 MakeEntry(218, "removexattr", kPath, kString),
1133 MakeEntry(219, "lremovexattr", kPath, kString),
1134 MakeEntry(220, "fremovexattr", kInt, kString),
1135 MakeEntry(221, "futex", kGen, kInt, kInt, kGen, kGen, kInt),
1136 MakeEntry(222, "sched_setaffinity", kInt, kInt, kHex),
1137 MakeEntry(223, "sched_getaffinity", kInt, kInt, kHex),
1138 MakeEntry(225, "tuxcall", UnknownArguments()),
1139 MakeEntry(226, "sendfile64", UnknownArguments()),
1140 MakeEntry(227, "io_setup", kInt, kHex),
1141 MakeEntry(228, "io_destroy", kInt),
1142 MakeEntry(229, "io_getevents", kInt, kInt, kInt, kHex, kHex),
1143 MakeEntry(230, "io_submit", kInt, kInt, kHex),
1144 MakeEntry(231, "io_cancel", kInt, kHex, kHex),
1145 MakeEntry(232, "set_tid_address", kHex),
1146 MakeEntry(233, "fadvise64", kInt, kInt, kInt, kInt),
1147 MakeEntry(234, "exit_group", kInt),
1148 MakeEntry(235, "lookup_dcookie", kInt, kString, kInt),
1149 MakeEntry(236, "epoll_create", kInt),
1150 MakeEntry(237, "epoll_ctl", kInt, kInt, kInt, kHex),
1151 MakeEntry(238, "epoll_wait", kInt, kHex, kInt, kInt),
1152 MakeEntry(239, "remap_file_pages", kGen, kInt, kInt, kInt, kHex),
1153 MakeEntry(240, "timer_create", kInt, kHex, kHex),
1154 MakeEntry(241, "timer_settime", kInt, kHex, kHex, kHex),
1155 MakeEntry(242, "timer_gettime", kInt, kHex),
1156 MakeEntry(243, "timer_getoverrun", kInt),
1157 MakeEntry(244, "timer_delete", kInt),
1158 MakeEntry(245, "clock_settime", kInt, kHex),
1159 MakeEntry(246, "clock_gettime", kInt, kHex),
1160 MakeEntry(247, "clock_getres", kInt, kHex),
1161 MakeEntry(248, "clock_nanosleep", kInt, kHex, kHex, kHex),
1162 MakeEntry(249, "swapcontext", UnknownArguments()),
1163 MakeEntry(250, "tgkill", kInt, kInt, kSignal),
1164 MakeEntry(251, "utimes", kPath, kHex),
1165 MakeEntry(252, "statfs64", UnknownArguments()),
1166 MakeEntry(253, "fstatfs64", UnknownArguments()),
1167 MakeEntry(254, "fadvise64_64", UnknownArguments()),
1168 MakeEntry(255, "rtas", UnknownArguments()),
1169 MakeEntry(256, "sys_debug_setcontext", kHex, kHex, kHex, kHex, kHex, kHex),
1170 MakeEntry(258, "migrate_pages", kInt, kInt, kHex, kHex),
1171 MakeEntry(259, "mbind", kGen, kInt, kInt, kHex, kInt, kHex),
1172 MakeEntry(260, "get_mempolicy", kInt, kHex, kInt, kInt, kHex),
1173 MakeEntry(261, "set_mempolicy", kInt, kHex, kInt),
1174 MakeEntry(262, "mq_open", kString, kHex, kOct, kHex),
1175 MakeEntry(263, "mq_unlink", kString),
1176 MakeEntry(264, "mq_timedsend", kHex, kHex, kInt, kInt, kHex),
1177 MakeEntry(265, "mq_timedreceive", kHex, kHex, kInt, kHex, kHex),
1178 MakeEntry(266, "mq_notify", kHex, kHex),
1179 MakeEntry(267, "mq_getsetattr", kHex, kHex, kHex),
1180 MakeEntry(268, "kexec_load", kHex, kInt, kHex, kHex),
1181 MakeEntry(269, "add_key", kString, kString, kGen, kInt, kInt),
1182 MakeEntry(270, "request_key", kString, kString, kHex, kInt),
1183 MakeEntry(271, "keyctl", kInt, kInt, kInt, kInt, kInt),
1184 MakeEntry(272, "waitid", kInt, kInt, kHex, kInt, kHex),
1185 MakeEntry(273, "ioprio_set", kInt, kInt, kInt),
1186 MakeEntry(274, "ioprio_get", kInt, kInt),
1187 MakeEntry(275, "inotify_init"),
1188 MakeEntry(276, "inotify_add_watch", kInt, kPath, kHex),
1189 MakeEntry(277, "inotify_rm_watch", kInt, kInt),
1190 MakeEntry(278, "spu_run", UnknownArguments()),
1191 MakeEntry(279, "spu_create", UnknownArguments()),
1192 MakeEntry(280, "pselect6", kInt, kHex, kHex, kHex, kHex),
1193 MakeEntry(281, "ppoll", kHex, kInt, kHex, kHex, kInt),
1194 MakeEntry(282, "unshare", kHex),
1195 MakeEntry(283, "splice", kInt, kHex, kInt, kHex, kInt, kHex),
1196 MakeEntry(284, "tee", kInt, kInt, kInt, kHex),
1197 MakeEntry(285, "vmsplice", kInt, kHex, kInt, kInt),
1198 MakeEntry(286, "openat", kInt, kPath, kHex, kOct),
1199 MakeEntry(287, "mkdirat", kInt, kPath, kOct),
1200 MakeEntry(288, "mknodat", kInt, kPath, kOct, kHex),
1201 MakeEntry(289, "fchownat", kInt, kPath, kInt, kInt, kHex),
1202 MakeEntry(290, "futimesat", kInt, kPath, kHex),
1203 MakeEntry(291, "newfstatat", kInt, kPath, kHex, kHex),
1204 MakeEntry(292, "unlinkat", kInt, kPath, kHex),
1205 MakeEntry(293, "renameat", kInt, kPath, kInt, kPath),
1206 MakeEntry(294, "linkat", kInt, kPath, kInt, kPath, kHex),
1207 MakeEntry(295, "symlinkat", kPath, kInt, kPath),
1208 MakeEntry(296, "readlinkat", kInt, kPath, kHex, kInt),
1209 MakeEntry(297, "fchmodat", kInt, kPath, kOct),
1210 MakeEntry(298, "faccessat", kInt, kPath, kInt, kHex),
1211 MakeEntry(299, "get_robust_list", kInt, kHex, kHex),
1212 MakeEntry(300, "set_robust_list", kHex, kInt),
1213 MakeEntry(301, "move_pages", kInt, kInt, kHex, kHex, kHex, kHex),
1214 MakeEntry(302, "getcpu", kHex, kHex, kHex),
1215 MakeEntry(303, "epoll_pwait", kInt, kHex, kInt, kInt, kHex, kInt),
1216 MakeEntry(304, "utimensat", kInt, kPath, kHex, kHex),
1217 MakeEntry(305, "signalfd", kInt, kHex, kHex),
1218 MakeEntry(306, "timerfd_create", kInt, kHex),
1219 MakeEntry(307, "eventfd", kInt),
1220 MakeEntry(308, "sync_file_range2", UnknownArguments()),
1221 MakeEntry(309, "fallocate", kInt, kOct, kInt, kInt),
1222 MakeEntry(310, "subpage_prot", UnknownArguments()),
1223 MakeEntry(311, "timerfd_settime", kInt, kHex, kHex, kHex),
1224 MakeEntry(312, "timerfd_gettime", kInt, kHex),
1225 MakeEntry(313, "signalfd4", kInt, kHex, kHex, kHex),
1226 MakeEntry(314, "eventfd2", kInt, kHex),
1227 MakeEntry(315, "epoll_create1", kHex),
1228 MakeEntry(316, "dup3", kInt, kInt, kHex),
1229 MakeEntry(317, "pipe2", kHex, kHex),
1230 MakeEntry(318, "inotify_init1", kHex),
1231 MakeEntry(319, "perf_event_open", kHex, kInt, kInt, kInt, kHex),
1232 MakeEntry(320, "preadv", kInt, kHex, kInt, kInt, kInt),
1233 MakeEntry(321, "pwritev", kInt, kHex, kInt, kInt, kInt),
1234 MakeEntry(322, "rt_tgsigqueueinfo", kInt, kInt, kInt, kHex),
1235 MakeEntry(323, "fanotify_init", kHex, kHex, kInt, kGen, kGen, kGen),
1236 MakeEntry(324, "fanotify_mark", kInt, kHex, kHex, kInt, kPath),
1237 MakeEntry(325, "prlimit64", kInt, kInt, kHex, kHex),
1238 MakeEntry(326, "socket", kAddressFamily, kInt, kInt),
1239 MakeEntry(327, "bind", kInt, kSockaddr, kInt),
1240 MakeEntry(328, "connect", kInt, kSockaddr, kInt),
1241 MakeEntry(329, "listen", kInt, kInt),
1242 MakeEntry(330, "accept", kInt, kSockaddr, kHex),
1243 MakeEntry(331, "getsockname", kInt, kSockaddr, kHex),
1244 MakeEntry(332, "getpeername", kInt, kSockaddr, kHex),
1245 MakeEntry(333, "socketpair", kAddressFamily, kInt, kInt, kHex),
1246 MakeEntry(334, "send", UnknownArguments()),
1247 MakeEntry(335, "sendto", kInt, kGen, kInt, kHex, kSockaddr, kInt),
1248 MakeEntry(336, "recv", UnknownArguments()),
1249 MakeEntry(337, "recvfrom", kInt, kHex, kInt, kHex, kSockaddr, kHex),
1250 MakeEntry(338, "shutdown", kInt, kInt),
1251 MakeEntry(339, "setsockopt", kInt, kInt, kInt, kHex, kHex),
1252 MakeEntry(340, "getsockopt", kInt, kInt, kInt, kHex, kInt),
1253 MakeEntry(341, "sendmsg", kInt, kSockmsghdr, kHex),
1254 MakeEntry(342, "recvmsg", kInt, kHex, kInt),
1255 MakeEntry(343, "recvmmsg", kInt, kHex, kInt, kHex, kHex),
1256 MakeEntry(344, "accept4", kInt, kHex, kHex, kInt),
1257 MakeEntry(345, "name_to_handle_at", kInt, kPath, kHex, kHex, kHex),
1258 MakeEntry(346, "open_by_handle_at", kInt, kHex, kHex),
1259 MakeEntry(347, "clock_adjtime", kInt, kHex),
1260 MakeEntry(348, "syncfs", kInt),
1261 MakeEntry(349, "sendmmsg", kInt, kHex, kInt, kHex),
1262 MakeEntry(350, "setns", kInt, kHex),
1263 MakeEntry(351, "process_vm_readv", kInt, kHex, kInt, kHex, kInt, kInt),
1264 MakeEntry(352, "process_vm_writev", kInt, kHex, kInt, kHex, kInt, kInt),
1265 MakeEntry(353, "finit_module", kInt, kString, kHex),
1266 MakeEntry(354, "kcmp", kInt, kInt, kInt, kInt, kInt),
1267 MakeEntry(355, "sched_setattr", kInt, kHex, kHex),
1268 MakeEntry(356, "sched_getattr", kInt, kHex, kInt, kHex),
1269 MakeEntry(357, "renameat2", kInt, kPath, kInt, kPath, kHex),
1270 MakeEntry(358, "seccomp", kInt, kHex, kHex),
1271 MakeEntry(359, "getrandom", kGen, kInt, kHex),
1272 MakeEntry(360, "memfd_create", kString, kHex),
1273 MakeEntry(361, "bpf", kInt, kHex, kInt),
1274 MakeEntry(362, "execveat", kInt, kPath, kHex, kHex, kHex),
1275 MakeEntry(363, "switch_endian", UnknownArguments()),
1276 MakeEntry(364, "userfaultfd", kHex),
1277 MakeEntry(365, "membarrier", kInt, kHex),
1278 MakeEntry(378, "mlock2", kHex, kInt, kHex),
1279 MakeEntry(379, "copy_file_range", kInt, kHex, kInt, kHex, kInt, kHex),
1280 MakeEntry(380, "preadv2", kInt, kHex, kInt, kInt, kInt, kHex),
1281 MakeEntry(381, "pwritev2", kInt, kHex, kInt, kInt, kInt, kHex),
1282 MakeEntry(435, "clone3", kHex, kInt),
1283 MakeEntry(436, "close_range", kInt, kInt, kHex),
1284 MakeEntry(437, "openat2", kInt, kPath, kHex, kInt),
1285 MakeEntry(438, "pidfd_getfd", UnknownArguments()),
1286 MakeEntry(439, "faccessat2", kInt, kPath, kHex, kHex),
1287 MakeEntry(440, "process_madvise", UnknownArguments()),
1288 MakeEntry(441, "epoll_pwait2", UnknownArguments()),
1289 MakeEntry(442, "mount_setattr", UnknownArguments()),
1290 MakeEntry(443, "quotactl_fd", UnknownArguments()),
1291 MakeEntry(444, "landlock_create_ruleset", UnknownArguments()),
1292 MakeEntry(445, "landlock_add_rule", UnknownArguments()),
1293 MakeEntry(446, "landlock_restrict_self", UnknownArguments()),
1294 MakeEntry(448, "process_mrelease", UnknownArguments()),
1295 MakeEntry(449, "futex_waitv", UnknownArguments()),
1296 MakeEntry(450, "set_mempolicy_home_node", UnknownArguments()),
1297 MakeEntry(451, "cachestat", UnknownArguments()),
1298 MakeEntry(452, "fchmodat2", kInt, kPath, kHex, kHex),
1299 MakeEntry(453, "map_shadow_stack", UnknownArguments()),
1300 MakeEntry(454, "futex_wake", UnknownArguments()),
1301 MakeEntry(455, "futex_wait", UnknownArguments()),
1302 MakeEntry(456, "futex_requeue", UnknownArguments()),
1303 MakeEntry(457, "statmount", UnknownArguments()),
1304 MakeEntry(458, "listmount", UnknownArguments()),
1305 MakeEntry(459, "lsm_get_self_attr", UnknownArguments()),
1306 MakeEntry(460, "lsm_set_self_attr", UnknownArguments()),
1307 MakeEntry(461, "lsm_list_modules", UnknownArguments()),
1308 // clang-format on
1309 };
1310
1311 static_assert(IsSorted(kSyscallDataPPC64LE, SyscallTable::Entry::BySyscallNr),
1312 "Syscalls should be sorted");
1313
1314 // https://github.com/torvalds/linux/blob/v5.8/include/uapi/asm-generic/unistd.h
1315 constexpr std::array kSyscallDataArm64 = {
1316 // clang-format off
1317 MakeEntry(0, "io_setup", kInt, kHex),
1318 MakeEntry(1, "io_destroy", kInt),
1319 MakeEntry(2, "io_submit", kInt, kInt, kHex),
1320 MakeEntry(3, "io_cancel", kInt, kHex, kHex),
1321 MakeEntry(4, "io_getevents", kInt, kInt, kInt, kHex, kHex),
1322 MakeEntry(5, "setxattr", kPath, kString, kGen, kInt, kHex),
1323 MakeEntry(6, "lsetxattr", kPath, kString, kGen, kInt, kHex),
1324 MakeEntry(7, "fsetxattr", kInt, kString, kGen, kInt, kHex),
1325 MakeEntry(8, "getxattr", kPath, kString, kGen, kInt),
1326 MakeEntry(9, "lgetxattr", kPath, kString, kGen, kInt),
1327 MakeEntry(10, "fgetxattr", kInt, kString, kGen, kInt),
1328 MakeEntry(11, "listxattr", kPath, kGen, kInt),
1329 MakeEntry(12, "llistxattr", kPath, kGen, kInt),
1330 MakeEntry(13, "flistxattr", kInt, kGen, kInt),
1331 MakeEntry(14, "removexattr", kPath, kString),
1332 MakeEntry(15, "lremovexattr", kPath, kString),
1333 MakeEntry(16, "fremovexattr", kInt, kString),
1334 MakeEntry(17, "getcwd", kHex, kInt),
1335 MakeEntry(18, "lookup_dcookie", kInt, kString, kInt),
1336 MakeEntry(19, "eventfd2", kInt, kHex),
1337 MakeEntry(20, "epoll_create1", kHex),
1338 MakeEntry(21, "epoll_ctl", kInt, kInt, kInt, kHex),
1339 MakeEntry(22, "epoll_pwait", kInt, kHex, kInt, kInt, kHex, kInt),
1340 MakeEntry(23, "dup", kInt),
1341 MakeEntry(24, "dup3", kInt, kInt, kHex),
1342 MakeEntry(25, "fcntl", kInt, kInt, kHex),
1343 MakeEntry(26, "inotify_init1", kHex),
1344 MakeEntry(27, "inotify_add_watch", kInt, kPath, kHex),
1345 MakeEntry(28, "inotify_rm_watch", kInt, kInt),
1346 MakeEntry(29, "ioctl", kInt, kInt, kHex),
1347 MakeEntry(30, "ioprio_set", kInt, kInt, kInt),
1348 MakeEntry(31, "ioprio_get", kInt, kInt),
1349 MakeEntry(32, "flock", kInt, kInt),
1350 MakeEntry(33, "mknodat", kInt, kPath, kOct, kHex),
1351 MakeEntry(34, "mkdirat", kInt, kPath, kOct),
1352 MakeEntry(35, "unlinkat", kInt, kPath, kHex),
1353 MakeEntry(36, "symlinkat", kPath, kInt, kPath),
1354 MakeEntry(37, "linkat", kInt, kPath, kInt, kPath, kHex),
1355 MakeEntry(38, "renameat", kInt, kPath, kInt, kPath),
1356 MakeEntry(39, "umount2", kPath, kHex),
1357 MakeEntry(40, "mount", kPath, kPath, kString, kHex, kGen),
1358 MakeEntry(41, "pivot_root", kPath, kPath),
1359 MakeEntry(42, "nfsservctl", kInt, kGen, kGen),
1360 MakeEntry(43, "statfs", kPath, kHex),
1361 MakeEntry(44, "fstatfs", kInt, kHex),
1362 MakeEntry(45, "truncate", kPath, kInt),
1363 MakeEntry(46, "ftruncate", kInt, kInt),
1364 MakeEntry(47, "fallocate", kInt, kOct, kInt, kInt),
1365 MakeEntry(48, "faccessat", kInt, kPath, kHex, kHex),
1366 MakeEntry(49, "chdir", kPath),
1367 MakeEntry(50, "fchdir", kInt),
1368 MakeEntry(51, "chroot", kPath),
1369 MakeEntry(52, "fchmod", kInt, kOct),
1370 MakeEntry(53, "fchmodat", kInt, kPath, kOct, kHex),
1371 MakeEntry(54, "fchownat", kInt, kPath, kInt, kInt, kHex),
1372 MakeEntry(55, "fchown", kInt, kInt, kInt),
1373 MakeEntry(56, "openat", kGen, kPath, kOct, kHex, kGen, kGen),
1374 MakeEntry(57, "close", kInt),
1375 MakeEntry(58, "vhangup"),
1376 MakeEntry(59, "pipe2", kHex, kHex),
1377 MakeEntry(60, "quotactl", kInt, kPath, kInt, kGen),
1378 MakeEntry(61, "getdents64", kInt, kHex, kInt),
1379 MakeEntry(62, "lseek", kInt, kInt, kInt),
1380 MakeEntry(63, "read", kInt, kHex, kInt),
1381 MakeEntry(64, "write", kInt, kHex, kInt),
1382 MakeEntry(65, "readv", kInt, kHex, kInt),
1383 MakeEntry(66, "writev", kInt, kHex, kInt),
1384 MakeEntry(67, "pread64", kInt, kHex, kInt, kInt),
1385 MakeEntry(68, "pwrite64", kInt, kHex, kInt, kInt),
1386 MakeEntry(69, "preadv", kInt, kHex, kInt, kInt, kInt),
1387 MakeEntry(70, "pwritev", kInt, kHex, kInt, kInt, kInt),
1388 MakeEntry(71, "sendfile", kInt, kInt, kHex, kInt),
1389 MakeEntry(72, "pselect6", kInt, kHex, kHex, kHex, kHex),
1390 MakeEntry(73, "ppoll", kHex, kInt, kHex, kHex, kInt),
1391 MakeEntry(74, "signalfd4", kInt, kHex, kHex, kHex),
1392 MakeEntry(75, "vmsplice", kInt, kHex, kInt, kInt),
1393 MakeEntry(76, "splice", kInt, kHex, kInt, kHex, kInt, kHex),
1394 MakeEntry(77, "tee", kInt, kInt, kInt, kHex),
1395 MakeEntry(78, "readlinkat", kInt, kPath, kHex, kInt),
1396 MakeEntry(79, "newfstatat", kInt, kPath, kHex, kHex),
1397 MakeEntry(80, "fstat", kInt, kHex),
1398 MakeEntry(81, "sync"),
1399 MakeEntry(82, "fsync", kInt),
1400 MakeEntry(83, "fdatasync", kInt),
1401 MakeEntry(84, "sync_file_range", kInt, kInt, kInt, kHex),
1402 MakeEntry(85, "timerfd_create", kInt, kHex),
1403 MakeEntry(86, "timerfd_settime", kInt, kHex, kHex, kHex),
1404 MakeEntry(87, "timerfd_gettime", kInt, kHex),
1405 MakeEntry(88, "utimensat", kInt, kPath, kHex, kHex),
1406 MakeEntry(89, "acct", kPath),
1407 MakeEntry(90, "capget", kHex, kHex),
1408 MakeEntry(91, "capset", kHex, kHex),
1409 MakeEntry(92, "personality", kHex),
1410 MakeEntry(93, "exit", kInt),
1411 MakeEntry(94, "exit_group", kInt),
1412 MakeEntry(95, "waitid", kInt, kInt, kHex, kInt, kHex),
1413 MakeEntry(96, "set_tid_address", kHex),
1414 MakeEntry(97, "unshare", kHex),
1415 MakeEntry(98, "futex", kGen, kInt, kInt, kGen, kGen, kInt),
1416 MakeEntry(99, "set_robust_list", kHex, kInt),
1417 MakeEntry(100, "get_robust_list", kInt, kHex, kHex),
1418 MakeEntry(101, "nanosleep", kHex, kHex),
1419 MakeEntry(102, "getitimer", kInt, kHex),
1420 MakeEntry(103, "setitimer", kInt, kHex, kHex),
1421 MakeEntry(104, "kexec_load", kHex, kInt, kHex, kHex),
1422 MakeEntry(105, "init_module", kGen, kInt, kString),
1423 MakeEntry(106, "delete_module", kString, kHex),
1424 MakeEntry(107, "timer_create", kInt, kHex, kHex),
1425 MakeEntry(108, "timer_gettime", kInt, kHex),
1426 MakeEntry(109, "timer_getoverrun", kInt),
1427 MakeEntry(110, "timer_settime", kInt, kHex, kHex, kHex),
1428 MakeEntry(111, "timer_delete", kInt),
1429 MakeEntry(112, "clock_settime", kInt, kHex),
1430 MakeEntry(113, "clock_gettime", kInt, kHex),
1431 MakeEntry(114, "clock_getres", kInt, kHex),
1432 MakeEntry(115, "clock_nanosleep", kInt, kHex, kHex, kHex),
1433 MakeEntry(116, "syslog", kInt, kHex, kInt),
1434 MakeEntry(117, "ptrace", kHex, kHex, kHex, kHex),
1435 MakeEntry(118, "sched_setparam", kInt, kHex),
1436 MakeEntry(119, "sched_setscheduler", kInt, kInt, kHex),
1437 MakeEntry(120, "sched_getscheduler", kInt),
1438 MakeEntry(121, "sched_getparam", kInt, kHex),
1439 MakeEntry(122, "sched_setaffinity", kInt, kInt, kHex),
1440 MakeEntry(123, "sched_getaffinity", kInt, kInt, kHex),
1441 MakeEntry(124, "sched_yield"),
1442 MakeEntry(125, "sched_get_priority_max", kHex),
1443 MakeEntry(126, "sched_get_priority_min", kHex),
1444 MakeEntry(127, "sched_rr_get_interval", kInt, kHex),
1445 MakeEntry(128, "restart_syscall"),
1446 MakeEntry(129, "kill", kInt, kSignal),
1447 MakeEntry(130, "tkill", kInt, kSignal),
1448 MakeEntry(131, "tgkill", kInt, kInt, kSignal),
1449 MakeEntry(132, "sigaltstack", kHex, kHex),
1450 MakeEntry(133, "rt_sigsuspend", kHex, kInt),
1451 MakeEntry(134, "rt_sigaction", kSignal, kHex, kHex, kInt),
1452 MakeEntry(135, "rt_sigprocmask", kInt, kHex, kHex, kInt),
1453 MakeEntry(136, "rt_sigpending", kHex, kInt),
1454 MakeEntry(137, "rt_sigtimedwait", kHex, kHex, kHex, kInt),
1455 MakeEntry(138, "rt_sigqueueinfo", kInt, kSignal, kHex),
1456 MakeEntry(139, "rt_sigreturn"),
1457 MakeEntry(140, "setpriority", kInt, kInt, kInt),
1458 MakeEntry(141, "getpriority", kInt, kInt),
1459 MakeEntry(142, "reboot", kInt, kHex, kHex, kGen),
1460 MakeEntry(143, "setregid", kInt, kInt),
1461 MakeEntry(144, "setgid", kInt),
1462 MakeEntry(145, "setreuid", kInt, kInt),
1463 MakeEntry(146, "setuid", kInt),
1464 MakeEntry(147, "setresuid", kInt, kInt, kInt),
1465 MakeEntry(148, "getresuid", kHex, kHex, kHex),
1466 MakeEntry(149, "setresgid", kInt, kInt, kInt),
1467 MakeEntry(150, "getresgid", kHex, kHex, kHex),
1468 MakeEntry(151, "setfsuid", kInt),
1469 MakeEntry(152, "setfsgid", kInt),
1470 MakeEntry(153, "times", kHex),
1471 MakeEntry(154, "setpgid", kInt, kInt),
1472 MakeEntry(155, "getpgid", kInt),
1473 MakeEntry(156, "getsid", kInt),
1474 MakeEntry(157, "setsid"),
1475 MakeEntry(158, "getgroups", kInt, kHex),
1476 MakeEntry(159, "setgroups", kInt, kHex),
1477 MakeEntry(160, "uname", kInt),
1478 MakeEntry(161, "sethostname", kString, kInt),
1479 MakeEntry(162, "setdomainname", kString, kInt),
1480 MakeEntry(163, "getrlimit", kInt, kHex),
1481 MakeEntry(164, "setrlimit", kInt, kHex),
1482 MakeEntry(165, "getrusage", kInt, kHex),
1483 MakeEntry(166, "umask", kHex),
1484 MakeEntry(167, "prctl", kInt, kHex, kHex, kHex, kHex),
1485 MakeEntry(168, "getcpu", kHex, kHex, kHex),
1486 MakeEntry(169, "gettimeofday", kHex, kHex),
1487 MakeEntry(170, "settimeofday", kHex, kHex),
1488 MakeEntry(171, "adjtimex", kHex),
1489 MakeEntry(172, "getpid"),
1490 MakeEntry(173, "getppid"),
1491 MakeEntry(174, "getuid"),
1492 MakeEntry(175, "geteuid"),
1493 MakeEntry(176, "getgid"),
1494 MakeEntry(177, "getegid"),
1495 MakeEntry(178, "gettid"),
1496 MakeEntry(179, "sysinfo", kHex),
1497 MakeEntry(180, "mq_open", kString, kHex, kOct, kHex),
1498 MakeEntry(181, "mq_unlink", kString),
1499 MakeEntry(182, "mq_timedsend", kHex, kHex, kInt, kInt, kHex),
1500 MakeEntry(183, "mq_timedreceive", kHex, kHex, kInt, kHex, kHex),
1501 MakeEntry(184, "mq_notify", kHex, kHex),
1502 MakeEntry(185, "mq_getsetattr", kHex, kHex, kHex),
1503 MakeEntry(186, "msgget", kInt, kHex),
1504 MakeEntry(187, "msgctl", kInt, kInt, kHex),
1505 MakeEntry(188, "msgrcv", kInt, kHex, kInt, kInt, kHex),
1506 MakeEntry(189, "msgsnd", kInt, kHex, kInt, kHex),
1507 MakeEntry(190, "semget", kInt, kInt, kHex),
1508 MakeEntry(191, "semctl", kInt, kInt, kInt, kHex),
1509 MakeEntry(192, "semtimedop", kInt, kHex, kInt, kHex),
1510 MakeEntry(193, "semop", kInt, kHex, kInt),
1511 MakeEntry(194, "shmget", kInt, kInt, kHex),
1512 MakeEntry(195, "shmctl", kInt, kInt, kHex),
1513 MakeEntry(196, "shmat", kInt, kHex, kHex),
1514 MakeEntry(197, "shmdt", kHex),
1515 MakeEntry(198, "socket", kAddressFamily, kInt, kInt),
1516 MakeEntry(199, "socketpair", kAddressFamily, kInt, kInt, kHex),
1517 MakeEntry(200, "bind", kInt, kSockaddr, kInt),
1518 MakeEntry(201, "listen", kInt, kInt),
1519 MakeEntry(202, "accept", kInt, kSockaddr, kHex),
1520 MakeEntry(203, "connect", kInt, kSockaddr, kInt),
1521 MakeEntry(204, "getsockname", kInt, kSockaddr, kHex),
1522 MakeEntry(205, "getpeername", kInt, kSockaddr, kHex),
1523 MakeEntry(206, "sendto", kInt, kGen, kInt, kHex, kSockaddr, kInt),
1524 MakeEntry(207, "recvfrom", kInt, kHex, kInt, kHex, kSockaddr, kHex),
1525 MakeEntry(208, "setsockopt", kInt, kInt, kInt, kHex, kHex),
1526 MakeEntry(209, "getsockopt", kInt, kInt, kInt, kHex, kInt),
1527 MakeEntry(210, "shutdown", kInt, kInt),
1528 MakeEntry(211, "sendmsg", kInt, kSockmsghdr, kHex),
1529 MakeEntry(212, "recvmsg", kInt, kHex, kInt),
1530 MakeEntry(213, "readahead", kInt, kInt, kInt),
1531 MakeEntry(214, "brk", kInt),
1532 MakeEntry(215, "munmap", kHex, kInt),
1533 MakeEntry(216, "mremap", kHex, kInt, kInt, kInt, kHex),
1534 MakeEntry(217, "add_key", kString, kString, kGen, kInt, kInt),
1535 MakeEntry(218, "request_key", kString, kString, kHex, kInt),
1536 MakeEntry(219, "keyctl", kInt, kInt, kInt, kInt, kInt),
1537 MakeEntry(220, "clone", kCloneFlag, kHex, kHex, kHex, kHex),
1538 MakeEntry(221, "execve", kPath, kHex, kHex),
1539 MakeEntry(222, "mmap", kHex, kInt, kHex, kHex, kInt, kInt),
1540 MakeEntry(223, "fadvise64", kInt, kInt, kInt, kInt),
1541 MakeEntry(224, "swapon", kPath, kHex),
1542 MakeEntry(225, "swapoff", kPath),
1543 MakeEntry(226, "mprotect", kHex, kInt, kHex),
1544 MakeEntry(227, "msync", kHex, kInt, kInt),
1545 MakeEntry(228, "mlock", kInt, kInt),
1546 MakeEntry(229, "munlock", kInt, kInt),
1547 MakeEntry(230, "mlockall", kHex),
1548 MakeEntry(231, "munlockall"),
1549 MakeEntry(232, "mincore", kHex, kInt, kHex),
1550 MakeEntry(233, "madvise", kHex, kInt, kInt),
1551 MakeEntry(234, "remap_file_pages", kGen, kInt, kInt, kInt, kHex),
1552 MakeEntry(235, "mbind", kGen, kInt, kInt, kHex, kInt, kHex),
1553 MakeEntry(236, "get_mempolicy", kInt, kHex, kInt, kInt, kHex),
1554 MakeEntry(237, "set_mempolicy", kInt, kHex, kInt),
1555 MakeEntry(238, "migrate_pages", kInt, kInt, kHex, kHex),
1556 MakeEntry(239, "move_pages", kInt, kInt, kHex, kHex, kHex, kHex),
1557 MakeEntry(240, "rt_tgsigqueueinfo", kInt, kInt, kInt, kHex),
1558 MakeEntry(241, "perf_event_open", kHex, kInt, kInt, kInt, kHex),
1559 MakeEntry(242, "accept4", kInt, kHex, kHex, kInt),
1560 MakeEntry(243, "recvmmsg", kInt, kHex, kInt, kHex, kHex),
1561 MakeEntry(260, "wait4", kInt, kHex, kHex, kHex),
1562 MakeEntry(261, "prlimit64", kInt, kInt, kHex, kHex),
1563 MakeEntry(262, "fanotify_init", kHex, kHex),
1564 MakeEntry(263, "fanotify_mark", kInt, kHex, kHex, kInt, kPath),
1565 MakeEntry(264, "name_to_handle_at", kInt, kPath, kHex, kHex, kHex),
1566 MakeEntry(265, "open_by_handle_at", kInt, kHex, kHex),
1567 MakeEntry(266, "clock_adjtime", kInt, kHex),
1568 MakeEntry(267, "syncfs", kInt),
1569 MakeEntry(268, "setns", kInt, kHex),
1570 MakeEntry(269, "sendmmsg", kInt, kHex, kInt, kHex),
1571 MakeEntry(270, "process_vm_readv", kInt, kHex, kInt, kHex, kInt, kInt),
1572 MakeEntry(271, "process_vm_writev", kInt, kHex, kInt, kHex, kInt, kInt),
1573 MakeEntry(272, "kcmp", kInt, kInt, kInt, kInt, kInt),
1574 MakeEntry(273, "finit_module", kInt, kString, kHex),
1575 MakeEntry(274, "sched_setattr", kInt, kHex, kHex),
1576 MakeEntry(275, "sched_getattr", kInt, kHex, kInt, kHex),
1577 MakeEntry(276, "renameat2", kGen, kPath, kGen, kPath, kGen, kGen),
1578 MakeEntry(277, "seccomp", kInt, kHex, kHex),
1579 MakeEntry(278, "getrandom", kGen, kInt, kHex),
1580 MakeEntry(279, "memfd_create", kString, kHex),
1581 MakeEntry(280, "bpf", kInt, kHex, kInt),
1582 MakeEntry(281, "execveat", kInt, kPath, kHex, kHex, kHex),
1583 MakeEntry(282, "userfaultfd", kHex),
1584 MakeEntry(283, "membarrier", kInt, kHex),
1585 MakeEntry(284, "mlock2", kHex, kInt, kHex),
1586 MakeEntry(285, "copy_file_range", kInt, kHex, kInt, kHex, kInt, kHex),
1587 MakeEntry(286, "preadv2", kInt, kHex, kInt, kInt, kInt, kHex),
1588 MakeEntry(287, "pwritev2", kInt, kHex, kInt, kInt, kInt, kHex),
1589 MakeEntry(435, "clone3", kHex, kInt),
1590 MakeEntry(436, "close_range", kInt, kInt, kHex),
1591 MakeEntry(437, "openat2", kInt, kPath, kHex, kInt),
1592 MakeEntry(438, "pidfd_getfd", UnknownArguments()),
1593 MakeEntry(439, "faccessat2", kInt, kPath, kHex, kHex),
1594 MakeEntry(440, "process_madvise", UnknownArguments()),
1595 MakeEntry(441, "epoll_pwait2", UnknownArguments()),
1596 MakeEntry(442, "mount_setattr", UnknownArguments()),
1597 MakeEntry(443, "quotactl_fd", UnknownArguments()),
1598 MakeEntry(444, "landlock_create_ruleset", UnknownArguments()),
1599 MakeEntry(445, "landlock_add_rule", UnknownArguments()),
1600 MakeEntry(446, "landlock_restrict_self", UnknownArguments()),
1601 MakeEntry(448, "process_mrelease", UnknownArguments()),
1602 MakeEntry(449, "futex_waitv", UnknownArguments()),
1603 MakeEntry(450, "set_mempolicy_home_node", UnknownArguments()),
1604 MakeEntry(451, "cachestat", UnknownArguments()),
1605 MakeEntry(452, "fchmodat2", kInt, kPath, kHex, kHex),
1606 MakeEntry(453, "map_shadow_stack", UnknownArguments()),
1607 MakeEntry(454, "futex_wake", UnknownArguments()),
1608 MakeEntry(455, "futex_wait", UnknownArguments()),
1609 MakeEntry(456, "futex_requeue", UnknownArguments()),
1610 MakeEntry(457, "statmount", UnknownArguments()),
1611 MakeEntry(458, "listmount", UnknownArguments()),
1612 MakeEntry(459, "lsm_get_self_attr", UnknownArguments()),
1613 MakeEntry(460, "lsm_set_self_attr", UnknownArguments()),
1614 MakeEntry(461, "lsm_list_modules", UnknownArguments()),
1615 // clang-format on
1616 };
1617
1618 static_assert(IsSorted(kSyscallDataArm64, SyscallTable::Entry::BySyscallNr),
1619 "Syscalls should be sorted");
1620
1621 constexpr std::array kSyscallDataArm32 = {
1622 // clang-format off
1623 MakeEntry(0, "restart_syscall"),
1624 MakeEntry(1, "exit", kHex, kHex, kHex, kHex),
1625 MakeEntry(2, "fork"),
1626 MakeEntry(3, "read", kInt, kHex, kInt),
1627 MakeEntry(4, "write", kHex, kHex, kHex, kHex),
1628 MakeEntry(5, "open", kPath, kHex, kOct),
1629 MakeEntry(6, "close", kHex, kHex, kHex, kHex),
1630 MakeEntry(8, "creat", kPath, kHex, kHex, kHex),
1631 MakeEntry(9, "link", kPath, kPath),
1632 MakeEntry(10, "unlink", kPath),
1633 MakeEntry(11, "execve", kPath, kHex, kHex),
1634 MakeEntry(12, "chdir", kPath),
1635 MakeEntry(14, "mknod", kPath, kOct, kHex),
1636 MakeEntry(15, "chmod", kPath, kOct),
1637 MakeEntry(16, "lchown", kPath, kInt, kInt),
1638 MakeEntry(19, "lseek", kInt, kInt, kInt),
1639 MakeEntry(20, "getpid"),
1640 MakeEntry(21, "mount", kPath, kPath, kString, kHex, kGen),
1641 MakeEntry(23, "setuid", kInt),
1642 MakeEntry(24, "getuid"),
1643 MakeEntry(26, "ptrace", kHex, kHex, kHex, kHex),
1644 MakeEntry(29, "pause"),
1645 MakeEntry(33, "access", kPath, kHex),
1646 MakeEntry(34, "nice", kHex, kHex, kHex, kHex),
1647 MakeEntry(36, "sync"),
1648 MakeEntry(37, "kill", kHex, kHex, kHex, kHex),
1649 MakeEntry(38, "rename", kPath, kPath),
1650 MakeEntry(39, "mkdir", kPath, kHex, kHex, kHex),
1651 MakeEntry(40, "rmdir", kHex, kHex, kHex, kHex),
1652 MakeEntry(41, "dup", kInt),
1653 MakeEntry(42, "pipe", kHex),
1654 MakeEntry(43, "times", kHex),
1655 MakeEntry(45, "brk", kHex),
1656 MakeEntry(46, "setgid", kInt),
1657 MakeEntry(47, "getgid"),
1658 MakeEntry(49, "geteuid"),
1659 MakeEntry(50, "getegid"),
1660 MakeEntry(51, "acct", kHex, kHex, kHex, kHex),
1661 MakeEntry(52, "umount2", kHex, kHex, kHex, kHex),
1662 MakeEntry(54, "ioctl", kInt, kInt, kHex),
1663 MakeEntry(55, "fcntl", kInt, kInt, kHex),
1664 MakeEntry(57, "setpgid", kInt, kInt),
1665 MakeEntry(60, "umask", kHex),
1666 MakeEntry(61, "chroot", kHex, kHex, kHex, kHex),
1667 MakeEntry(62, "ustat", kHex, kHex),
1668 MakeEntry(63, "dup2", kGen, kGen),
1669 MakeEntry(64, "getppid"),
1670 MakeEntry(65, "getpgrp"),
1671 MakeEntry(66, "setsid"),
1672 MakeEntry(67, "sigaction", kHex, kHex, kHex, kHex),
1673 MakeEntry(70, "setreuid", kInt, kInt),
1674 MakeEntry(71, "setregid", kInt, kInt),
1675 MakeEntry(72, "sigsuspend", kHex, kHex, kHex, kHex),
1676 MakeEntry(73, "sigpending", kHex, kHex, kHex, kHex),
1677 MakeEntry(74, "sethostname", kString, kInt),
1678 MakeEntry(75, "setrlimit", kInt, kHex),
1679 MakeEntry(77, "getrusage", kInt, kHex),
1680 MakeEntry(78, "gettimeofday", kHex, kHex),
1681 MakeEntry(79, "settimeofday", kHex, kHex),
1682 MakeEntry(80, "getgroups", kInt, kHex),
1683 MakeEntry(81, "setgroups", kInt, kHex),
1684 MakeEntry(83, "symlink", kPath, kPath),
1685 MakeEntry(85, "readlink", kPath, kGen, kInt),
1686 MakeEntry(86, "uselib", kPath),
1687 MakeEntry(87, "swapon", kHex, kHex, kHex, kHex),
1688 MakeEntry(88, "reboot", kGen, kGen, kGen, kGen),
1689 MakeEntry(91, "munmap", kHex, kHex),
1690 MakeEntry(92, "truncate", kPath, kHex, kHex, kHex),
1691 MakeEntry(93, "ftruncate", kInt, kInt),
1692 MakeEntry(94, "fchmod", kInt, kOct),
1693 MakeEntry(95, "fchown", kInt, kInt, kInt),
1694 MakeEntry(96, "getpriority", kInt, kInt),
1695 MakeEntry(97, "setpriority", kInt, kInt, kInt),
1696 MakeEntry(99, "statfs", kPath, kHex),
1697 MakeEntry(100, "fstatfs", kInt, kHex),
1698 MakeEntry(103, "syslog", kInt, kHex, kInt),
1699 MakeEntry(104, "setitimer", kInt, kHex, kHex),
1700 MakeEntry(105, "getitimer", kInt, kHex),
1701 MakeEntry(106, "stat", kPath, kGen),
1702 MakeEntry(107, "lstat", kPath, kGen),
1703 MakeEntry(108, "fstat", kHex, kHex, kHex, kHex),
1704 MakeEntry(111, "vhangup"),
1705 MakeEntry(114, "wait4", kHex, kHex, kHex, kHex),
1706 MakeEntry(115, "swapoff", kHex, kHex, kHex, kHex),
1707 MakeEntry(116, "sysinfo", kHex),
1708 MakeEntry(118, "fsync", kInt),
1709 MakeEntry(119, "sigreturn", kHex, kHex, kHex, kHex),
1710 MakeEntry(120, "clone", kCloneFlag, kHex, kHex, kHex, kHex),
1711 MakeEntry(121, "setdomainname", kString, kInt),
1712 MakeEntry(122, "uname", kInt),
1713 MakeEntry(124, "adjtimex", kHex),
1714 MakeEntry(125, "mprotect", kHex, kHex, kHex),
1715 MakeEntry(126, "sigprocmask", kHex, kHex, kHex, kHex),
1716 MakeEntry(128, "init_module", kGen, kInt, kString),
1717 MakeEntry(129, "delete_module", kString, kHex),
1718 MakeEntry(131, "quotactl", kHex, kHex, kHex, kHex),
1719 MakeEntry(132, "getpgid", kInt),
1720 MakeEntry(133, "fchdir", kInt),
1721 MakeEntry(134, "bdflush", kHex, kHex, kHex, kHex),
1722 MakeEntry(135, "sysfs", kInt, kInt, kInt),
1723 MakeEntry(136, "personality", kHex),
1724 MakeEntry(138, "setfsuid", kInt),
1725 MakeEntry(139, "setfsgid", kInt),
1726 MakeEntry(140, "_llseek", kHex, kHex, kHex, kHex),
1727 MakeEntry(141, "getdents", kInt, kHex, kInt),
1728 MakeEntry(142, "_newselect", kHex, kHex, kHex, kHex),
1729 MakeEntry(143, "flock", kInt, kInt),
1730 MakeEntry(144, "msync", kHex, kInt, kInt),
1731 MakeEntry(145, "readv", kInt, kHex, kInt),
1732 MakeEntry(146, "writev", kInt, kHex, kInt),
1733 MakeEntry(147, "getsid", kInt),
1734 MakeEntry(148, "fdatasync", kInt),
1735 MakeEntry(149, "_sysctl", kHex),
1736 MakeEntry(150, "mlock", kInt, kInt),
1737 MakeEntry(151, "munlock", kInt, kInt),
1738 MakeEntry(152, "mlockall", kHex),
1739 MakeEntry(153, "munlockall"),
1740 MakeEntry(154, "sched_setparam", kInt, kHex),
1741 MakeEntry(155, "sched_getparam", kInt, kHex),
1742 MakeEntry(156, "sched_setscheduler", kInt, kInt, kHex),
1743 MakeEntry(157, "sched_getscheduler", kInt),
1744 MakeEntry(158, "sched_yield"),
1745 MakeEntry(159, "sched_get_priority_max", kHex),
1746 MakeEntry(160, "sched_get_priority_min", kHex),
1747 MakeEntry(161, "sched_rr_get_interval", kInt, kHex),
1748 MakeEntry(162, "nanosleep", kHex, kHex),
1749 MakeEntry(163, "mremap", kHex, kInt, kInt, kInt, kHex),
1750 MakeEntry(164, "setresuid", kInt, kInt, kInt),
1751 MakeEntry(165, "getresuid", kHex, kHex, kHex),
1752 MakeEntry(168, "poll", kGen, kInt, kInt),
1753 MakeEntry(169, "nfsservctl", kInt, kGen, kGen),
1754 MakeEntry(170, "setresgid", kInt, kInt, kInt),
1755 MakeEntry(171, "getresgid", kHex, kHex, kHex),
1756 MakeEntry(172, "prctl", kInt, kHex, kHex, kHex, kHex),
1757 MakeEntry(173, "rt_sigreturn"),
1758 MakeEntry(174, "rt_sigaction", kHex, kHex, kHex, kHex),
1759 MakeEntry(175, "rt_sigprocmask", kGen, kGen, kGen, kGen),
1760 MakeEntry(176, "rt_sigpending", kHex, kInt),
1761 MakeEntry(177, "rt_sigtimedwait", kGen, kGen, kGen, kGen),
1762 MakeEntry(178, "rt_sigqueueinfo", kInt, kSignal, kHex),
1763 MakeEntry(179, "rt_sigsuspend", kHex, kInt),
1764 MakeEntry(180, "pread64", kGen, kGen, kGen, kGen),
1765 MakeEntry(181, "pwrite64", kGen, kGen, kGen, kGen),
1766 MakeEntry(182, "chown", kHex, kHex, kHex, kHex),
1767 MakeEntry(183, "getcwd", kHex, kInt),
1768 MakeEntry(184, "capget", kHex, kHex),
1769 MakeEntry(185, "capset", kHex, kHex),
1770 MakeEntry(186, "sigaltstack", kHex, kHex),
1771 MakeEntry(187, "sendfile", kGen, kGen, kGen, kGen),
1772 MakeEntry(190, "vfork"),
1773 MakeEntry(191, "ugetrlimit", kHex, kHex, kHex, kHex),
1774 MakeEntry(192, "mmap2", kHex, kHex, kHex, kHex),
1775 MakeEntry(193, "truncate64", kHex, kHex, kHex, kHex),
1776 MakeEntry(194, "ftruncate64", kHex, kHex, kHex, kHex),
1777 MakeEntry(195, "stat64", kHex, kHex, kHex, kHex),
1778 MakeEntry(196, "lstat64", kHex, kHex, kHex, kHex),
1779 MakeEntry(197, "fstat64", kHex, kHex, kHex, kHex),
1780 MakeEntry(198, "lchown32", kHex, kHex, kHex, kHex),
1781 MakeEntry(199, "getuid32", kHex, kHex, kHex, kHex),
1782 MakeEntry(200, "getgid32", kHex, kHex, kHex, kHex),
1783 MakeEntry(201, "geteuid32", kHex, kHex, kHex, kHex),
1784 MakeEntry(202, "getegid32", kHex, kHex, kHex, kHex),
1785 MakeEntry(203, "setreuid32", kHex, kHex, kHex, kHex),
1786 MakeEntry(204, "setregid32", kHex, kHex, kHex, kHex),
1787 MakeEntry(205, "getgroups32", kHex, kHex, kHex, kHex),
1788 MakeEntry(206, "setgroups32", kHex, kHex, kHex, kHex),
1789 MakeEntry(207, "fchown32", kHex, kHex, kHex, kHex),
1790 MakeEntry(208, "setresuid32", kHex, kHex, kHex, kHex),
1791 MakeEntry(209, "getresuid32", kHex, kHex, kHex, kHex),
1792 MakeEntry(210, "setresgid32", kHex, kHex, kHex, kHex),
1793 MakeEntry(211, "getresgid32", kHex, kHex, kHex, kHex),
1794 MakeEntry(212, "chown32", kHex, kHex, kHex, kHex),
1795 MakeEntry(213, "setuid32", kHex, kHex, kHex, kHex),
1796 MakeEntry(214, "setgid32", kHex, kHex, kHex, kHex),
1797 MakeEntry(215, "setfsuid32", kHex, kHex, kHex, kHex),
1798 MakeEntry(216, "setfsgid32", kHex, kHex, kHex, kHex),
1799 MakeEntry(217, "getdents64", kInt, kHex, kInt),
1800 MakeEntry(218, "pivot_root", kHex, kHex, kHex, kHex),
1801 MakeEntry(219, "mincore", kHex, kInt, kHex),
1802 MakeEntry(220, "madvise", kHex, kInt, kInt),
1803 MakeEntry(221, "fcntl64", kHex, kHex, kHex, kHex),
1804 MakeEntry(224, "gettid"),
1805 MakeEntry(225, "readahead", kInt, kInt, kInt),
1806 MakeEntry(226, "setxattr", kPath, kString, kGen, kInt, kHex),
1807 MakeEntry(227, "lsetxattr", kPath, kString, kGen, kInt, kHex),
1808 MakeEntry(228, "fsetxattr", kInt, kString, kGen, kInt, kHex),
1809 MakeEntry(229, "getxattr", kHex, kHex, kHex, kHex),
1810 MakeEntry(230, "lgetxattr", kHex, kHex, kHex, kHex),
1811 MakeEntry(231, "fgetxattr", kGen, kGen, kGen, kGen),
1812 MakeEntry(232, "listxattr", kHex, kHex, kHex, kHex),
1813 MakeEntry(233, "llistxattr", kHex, kHex, kHex, kHex),
1814 MakeEntry(234, "flistxattr", kInt, kGen, kInt),
1815 MakeEntry(235, "removexattr", kHex, kHex, kHex, kHex),
1816 MakeEntry(236, "lremovexattr", kPath, kString),
1817 MakeEntry(237, "fremovexattr", kInt, kString),
1818 MakeEntry(238, "tkill", kHex, kHex, kHex, kHex),
1819 MakeEntry(239, "sendfile64", kHex, kHex, kHex, kHex),
1820 MakeEntry(240, "futex", kGen, kInt, kInt, kGen, kGen, kInt),
1821 MakeEntry(241, "sched_setaffinity", kInt, kInt, kHex),
1822 MakeEntry(242, "sched_getaffinity", kInt, kInt, kHex),
1823 MakeEntry(243, "io_setup", kInt, kHex),
1824 MakeEntry(244, "io_destroy", kInt),
1825 MakeEntry(245, "io_getevents", kInt, kInt, kInt, kHex, kHex),
1826 MakeEntry(246, "io_submit", kInt, kInt, kHex),
1827 MakeEntry(247, "io_cancel", kInt, kHex, kHex),
1828 MakeEntry(248, "exit_group", kHex, kHex, kHex, kHex),
1829 MakeEntry(249, "lookup_dcookie", kInt, kString, kInt),
1830 MakeEntry(250, "epoll_create", kInt),
1831 MakeEntry(251, "epoll_ctl", kGen, kGen, kGen, kGen),
1832 MakeEntry(252, "epoll_wait", kGen, kGen, kGen, kGen),
1833 MakeEntry(253, "remap_file_pages", kGen, kInt, kInt, kInt, kHex),
1834 MakeEntry(256, "set_tid_address", kHex),
1835 MakeEntry(257, "timer_create", kInt, kHex, kHex),
1836 MakeEntry(258, "timer_settime", kGen, kGen, kGen, kGen),
1837 MakeEntry(259, "timer_gettime", kInt, kHex),
1838 MakeEntry(260, "timer_getoverrun", kInt),
1839 MakeEntry(261, "timer_delete", kInt),
1840 MakeEntry(262, "clock_settime", kInt, kHex),
1841 MakeEntry(263, "clock_gettime", kInt, kHex),
1842 MakeEntry(264, "clock_getres", kInt, kHex),
1843 MakeEntry(265, "clock_nanosleep", kGen, kGen, kGen, kGen),
1844 MakeEntry(266, "statfs64", kHex, kHex, kHex, kHex),
1845 MakeEntry(267, "fstatfs64", kHex, kHex, kHex, kHex),
1846 MakeEntry(268, "tgkill", kHex, kHex, kHex, kHex),
1847 MakeEntry(269, "utimes", kPath, kHex),
1848 MakeEntry(271, "pciconfig_iobase", kHex, kHex, kHex, kHex),
1849 MakeEntry(272, "pciconfig_read", kHex, kHex, kHex, kHex),
1850 MakeEntry(273, "pciconfig_write", kHex, kHex, kHex, kHex),
1851 MakeEntry(274, "mq_open", kGen, kGen, kGen, kGen),
1852 MakeEntry(275, "mq_unlink", kString),
1853 MakeEntry(276, "mq_timedsend", kHex, kHex, kInt, kInt, kHex),
1854 MakeEntry(277, "mq_timedreceive", kHex, kHex, kInt, kHex, kHex),
1855 MakeEntry(278, "mq_notify", kHex, kHex),
1856 MakeEntry(279, "mq_getsetattr", kHex, kHex, kHex),
1857 MakeEntry(280, "waitid", kInt, kInt, kHex, kInt, kHex),
1858 MakeEntry(281, "socket", kAddressFamily, kInt, kInt),
1859 MakeEntry(282, "bind", kInt, kSockaddr, kInt),
1860 MakeEntry(283, "connect", kInt, kSockaddr, kInt),
1861 MakeEntry(284, "listen", kInt, kInt),
1862 MakeEntry(285, "accept", kInt, kSockaddr, kHex),
1863 MakeEntry(286, "getsockname", kInt, kSockaddr, kHex),
1864 MakeEntry(287, "getpeername", kInt, kSockaddr, kHex),
1865 MakeEntry(288, "socketpair", kGen, kGen, kGen, kGen),
1866 MakeEntry(289, "send", kHex, kHex, kHex, kHex),
1867 MakeEntry(290, "sendto", kInt, kGen, kInt, kHex, kSockaddr, kInt),
1868 MakeEntry(291, "recv", kHex, kHex, kHex, kHex),
1869 MakeEntry(292, "recvfrom", kInt, kHex, kInt, kHex, kSockaddr, kHex),
1870 MakeEntry(293, "shutdown", kInt, kInt),
1871 MakeEntry(294, "setsockopt", kInt, kInt, kInt, kHex, kHex),
1872 MakeEntry(295, "getsockopt", kInt, kInt, kInt, kHex, kInt),
1873 MakeEntry(296, "sendmsg", kInt, kSockmsghdr, kHex),
1874 MakeEntry(297, "recvmsg", kInt, kHex, kInt),
1875 MakeEntry(298, "semop", kInt, kHex, kInt),
1876 MakeEntry(299, "semget", kInt, kInt, kHex),
1877 MakeEntry(300, "semctl", kInt, kInt, kInt, kHex),
1878 MakeEntry(301, "msgsnd", kInt, kHex, kInt, kHex),
1879 MakeEntry(302, "msgrcv", kInt, kHex, kInt, kInt, kHex),
1880 MakeEntry(303, "msgget", kInt, kHex),
1881 MakeEntry(304, "msgctl", kInt, kInt, kHex),
1882 MakeEntry(305, "shmat", kInt, kHex, kHex),
1883 MakeEntry(306, "shmdt", kHex),
1884 MakeEntry(307, "shmget", kInt, kInt, kHex),
1885 MakeEntry(308, "shmctl", kInt, kInt, kHex),
1886 MakeEntry(309, "add_key", kString, kString, kGen, kInt, kInt),
1887 MakeEntry(310, "request_key", kGen, kGen, kGen, kGen),
1888 MakeEntry(311, "keyctl", kInt, kInt, kInt, kInt, kInt),
1889 MakeEntry(312, "semtimedop", kInt, kHex, kInt, kHex),
1890 MakeEntry(313, "vserver", kHex, kHex, kHex, kHex),
1891 MakeEntry(314, "ioprio_set", kInt, kInt, kInt),
1892 MakeEntry(315, "ioprio_get", kInt, kInt),
1893 MakeEntry(316, "inotify_init"),
1894 MakeEntry(317, "inotify_add_watch", kInt, kPath, kHex),
1895 MakeEntry(318, "inotify_rm_watch", kInt, kInt),
1896 MakeEntry(319, "mbind", kGen, kInt, kInt, kHex, kInt, kHex),
1897 MakeEntry(320, "get_mempolicy", kInt, kHex, kInt, kInt, kHex),
1898 MakeEntry(321, "set_mempolicy", kInt, kHex, kInt),
1899 MakeEntry(322, "openat", kGen, kPath, kOct, kHex, kGen, kGen),
1900 MakeEntry(323, "mkdirat", kInt, kPath, kOct),
1901 MakeEntry(324, "mknodat", kInt, kPath, kOct, kHex),
1902 MakeEntry(325, "fchownat", kInt, kPath, kInt, kInt, kHex),
1903 MakeEntry(326, "futimesat", kInt, kPath, kHex),
1904 MakeEntry(327, "fstatat64", kHex, kHex, kHex, kHex),
1905 MakeEntry(328, "unlinkat", kInt, kPath, kHex),
1906 MakeEntry(329, "renameat", kGen, kPath, kGen, kPath),
1907 MakeEntry(330, "linkat", kInt, kPath, kInt, kPath, kHex),
1908 MakeEntry(331, "symlinkat", kPath, kGen, kPath),
1909 MakeEntry(332, "readlinkat", kInt, kPath, kHex, kInt),
1910 MakeEntry(333, "fchmodat", kInt, kPath, kOct, kHex),
1911 MakeEntry(334, "faccessat", kInt, kPath, kHex, kHex),
1912 MakeEntry(335, "pselect6", kInt, kHex, kHex, kHex, kHex),
1913 MakeEntry(336, "ppoll", kHex, kInt, kHex, kHex, kInt),
1914 MakeEntry(337, "unshare", kHex),
1915 MakeEntry(338, "set_robust_list", kGen, kGen),
1916 MakeEntry(339, "get_robust_list", kInt, kHex, kHex),
1917 MakeEntry(340, "splice", kInt, kHex, kInt, kHex, kInt, kHex),
1918 MakeEntry(342, "tee", kGen, kGen, kGen, kGen),
1919 MakeEntry(343, "vmsplice", kGen, kGen, kGen, kGen),
1920 MakeEntry(344, "move_pages", kInt, kInt, kHex, kHex, kHex, kHex),
1921 MakeEntry(345, "getcpu", kHex, kHex, kHex),
1922 MakeEntry(346, "epoll_pwait", kInt, kHex, kInt, kInt, kHex, kInt),
1923 MakeEntry(347, "kexec_load", kGen, kGen, kGen, kGen),
1924 MakeEntry(348, "utimensat", kGen, kGen, kGen, kGen),
1925 MakeEntry(349, "signalfd", kInt, kHex, kHex),
1926 MakeEntry(350, "timerfd_create", kInt, kHex),
1927 MakeEntry(351, "eventfd", kInt),
1928 MakeEntry(352, "fallocate", kGen, kGen, kGen, kGen),
1929 MakeEntry(353, "timerfd_settime", kGen, kGen, kGen, kGen),
1930 MakeEntry(354, "timerfd_gettime", kInt, kHex),
1931 MakeEntry(355, "signalfd4", kGen, kGen, kGen, kGen),
1932 MakeEntry(356, "eventfd2", kInt, kHex),
1933 MakeEntry(357, "epoll_create1", kHex),
1934 MakeEntry(358, "dup3", kGen, kGen, kGen),
1935 MakeEntry(359, "pipe2", kHex, kHex),
1936 MakeEntry(360, "inotify_init1", kHex),
1937 MakeEntry(361, "preadv", kInt, kHex, kInt, kInt, kInt),
1938 MakeEntry(362, "pwritev", kInt, kHex, kInt, kInt, kInt),
1939 MakeEntry(363, "rt_tgsigqueueinfo", kGen, kGen, kGen, kGen),
1940 MakeEntry(364, "perf_event_open", kHex, kInt, kInt, kInt, kHex),
1941 MakeEntry(365, "recvmmsg", kInt, kHex, kInt, kHex, kHex),
1942 MakeEntry(366, "accept4", kGen, kGen, kGen, kGen),
1943 MakeEntry(367, "fanotify_init", kHex, kHex, kHex, kHex),
1944 MakeEntry(368, "fanotify_mark", kInt, kHex, kHex, kInt, kPath),
1945 MakeEntry(369, "prlimit64", kHex, kHex, kHex, kHex),
1946 MakeEntry(370, "name_to_handle_at", kInt, kPath, kHex, kHex, kHex),
1947 MakeEntry(371, "open_by_handle_at", kHex, kHex, kHex, kHex),
1948 MakeEntry(372, "clock_adjtime", kHex, kHex, kHex, kHex),
1949 MakeEntry(373, "syncfs", kHex, kHex, kHex, kHex),
1950 MakeEntry(374, "sendmmsg", kHex, kHex, kHex, kHex),
1951 MakeEntry(375, "setns", kHex, kHex, kHex, kHex),
1952 MakeEntry(376, "process_vm_readv", kInt, kHex, kInt, kHex, kInt, kInt),
1953 MakeEntry(377, "process_vm_writev", kInt, kHex, kInt, kHex, kInt, kInt),
1954 MakeEntry(378, "kcmp", kInt, kInt, kInt, kInt, kInt),
1955 MakeEntry(379, "finit_module", kHex, kHex, kHex, kHex),
1956 MakeEntry(380, "sched_setattr", kInt, kHex, kHex),
1957 MakeEntry(381, "sched_getattr", kGen, kGen, kGen, kGen),
1958 MakeEntry(382, "renameat2", kGen, kPath, kGen, kPath, kGen, kGen),
1959 MakeEntry(383, "seccomp", kInt, kHex, kHex),
1960 MakeEntry(384, "getrandom", kGen, kInt, kHex),
1961 MakeEntry(385, "memfd_create", kString, kHex),
1962 MakeEntry(386, "bpf", kHex, kHex, kHex, kHex),
1963 MakeEntry(387, "execveat", kInt, kPath, kHex, kHex, kHex),
1964 MakeEntry(388, "userfaultfd", kHex),
1965 MakeEntry(389, "membarrier", kHex, kHex),
1966 MakeEntry(390, "mlock2", kHex, kHex, kHex, kHex),
1967 MakeEntry(391, "copy_file_range", kInt, kHex, kInt, kHex, kInt, kHex),
1968 MakeEntry(392, "preadv2", kInt, kHex, kInt, kInt, kInt, kHex),
1969 MakeEntry(393, "pwritev2", kInt, kHex, kInt, kInt, kInt, kHex),
1970 MakeEntry(400, "migrate_pages", kGen, kGen, kGen, kGen),
1971 MakeEntry(401, "kexec_file_load", kInt, kInt, kInt, kString, kHex),
1972 MakeEntry(435, "clone3", kHex, kInt),
1973 MakeEntry(436, "close_range", kInt, kInt, kHex),
1974 MakeEntry(437, "openat2", kInt, kPath, kHex, kInt),
1975 MakeEntry(438, "pidfd_getfd", UnknownArguments()),
1976 MakeEntry(439, "faccessat2", kInt, kPath, kHex, kHex),
1977 MakeEntry(440, "process_madvise", UnknownArguments()),
1978 MakeEntry(441, "epoll_pwait2", UnknownArguments()),
1979 MakeEntry(442, "mount_setattr", UnknownArguments()),
1980 MakeEntry(443, "quotactl_fd", UnknownArguments()),
1981 MakeEntry(444, "landlock_create_ruleset", UnknownArguments()),
1982 MakeEntry(445, "landlock_add_rule", UnknownArguments()),
1983 MakeEntry(446, "landlock_restrict_self", UnknownArguments()),
1984 MakeEntry(448, "process_mrelease", UnknownArguments()),
1985 MakeEntry(449, "futex_waitv", UnknownArguments()),
1986 MakeEntry(450, "set_mempolicy_home_node", UnknownArguments()),
1987 MakeEntry(451, "cachestat", UnknownArguments()),
1988 MakeEntry(452, "fchmodat2", kInt, kPath, kHex, kHex),
1989 MakeEntry(453, "map_shadow_stack", UnknownArguments()),
1990 MakeEntry(454, "futex_wake", UnknownArguments()),
1991 MakeEntry(455, "futex_wait", UnknownArguments()),
1992 MakeEntry(456, "futex_requeue", UnknownArguments()),
1993 MakeEntry(457, "statmount", UnknownArguments()),
1994 MakeEntry(458, "listmount", UnknownArguments()),
1995 MakeEntry(459, "lsm_get_self_attr", UnknownArguments()),
1996 MakeEntry(460, "lsm_set_self_attr", UnknownArguments()),
1997 MakeEntry(461, "lsm_list_modules", UnknownArguments()),
1998 MakeEntry(0xf0001, "ARM_breakpoint", kHex, kHex, kHex, kHex),
1999 MakeEntry(0xf0002, "ARM_cacheflush", kHex, kHex, kHex, kHex),
2000 MakeEntry(0xf0003, "ARM_usr26", kHex, kHex, kHex, kHex),
2001 MakeEntry(0xf0004, "ARM_usr32", kHex, kHex, kHex, kHex),
2002 MakeEntry(0xf0005, "ARM_set_tls", kHex, kHex, kHex, kHex),
2003 // clang-format on
2004 };
2005
2006 static_assert(IsSorted(kSyscallDataArm32, SyscallTable::Entry::BySyscallNr),
2007 "Syscalls should be sorted");
2008
2009 } // namespace
2010 } // namespace syscalls
2011
get(sapi::cpu::Architecture arch)2012 SyscallTable SyscallTable::get(sapi::cpu::Architecture arch) {
2013 switch (arch) {
2014 case sapi::cpu::kX8664:
2015 return SyscallTable(syscalls::kSyscallDataX8664);
2016 case sapi::cpu::kX86:
2017 return SyscallTable(syscalls::kSyscallDataX8632);
2018 case sapi::cpu::kPPC64LE:
2019 return SyscallTable(syscalls::kSyscallDataPPC64LE);
2020 case sapi::cpu::kArm64:
2021 return SyscallTable(syscalls::kSyscallDataArm64);
2022 case sapi::cpu::kArm:
2023 return SyscallTable(syscalls::kSyscallDataArm32);
2024 default:
2025 return SyscallTable();
2026 }
2027 }
2028
2029 } // namespace sandbox2
2030