xref: /aosp_15_r20/external/sandboxed-api/sandboxed_api/sandbox2/syscall_defs.cc (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
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