authorgravatar for yangxudong@ymatrix.cnYANG Xudong <yangxudong@ymatrix.cn> 2024-02-01 14:31:13+08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-06-05 18:54:14-04:00
log87150468fc25f2ad70abcc1428112bfb8d31843a
treebd972036fc484318721ddbd2d9016ab066ceca4e
parent95f0dce7dae258fc2cf9947fdaad26d768902373

generate loongarch64 Linux syscalls


2 files changed, 373 insertions(+), 0 deletions(-)

lib/std/os/linux/syscalls.zig+309
......@@ -3911,3 +3911,312 @@ pub const RiscV64 = enum(usize) {
39113911
39123912 riscv_flush_icache = arch_specific_syscall + 15,
39133913};
3914
3915pub const LoongArch64 = enum(usize) {
3916 io_setup = 0,
3917 io_destroy = 1,
3918 io_submit = 2,
3919 io_cancel = 3,
3920 io_getevents = 4,
3921 setxattr = 5,
3922 lsetxattr = 6,
3923 fsetxattr = 7,
3924 getxattr = 8,
3925 lgetxattr = 9,
3926 fgetxattr = 10,
3927 listxattr = 11,
3928 llistxattr = 12,
3929 flistxattr = 13,
3930 removexattr = 14,
3931 lremovexattr = 15,
3932 fremovexattr = 16,
3933 getcwd = 17,
3934 lookup_dcookie = 18,
3935 eventfd2 = 19,
3936 epoll_create1 = 20,
3937 epoll_ctl = 21,
3938 epoll_pwait = 22,
3939 dup = 23,
3940 dup3 = 24,
3941 fcntl = 25,
3942 inotify_init1 = 26,
3943 inotify_add_watch = 27,
3944 inotify_rm_watch = 28,
3945 ioctl = 29,
3946 ioprio_set = 30,
3947 ioprio_get = 31,
3948 flock = 32,
3949 mknodat = 33,
3950 mkdirat = 34,
3951 unlinkat = 35,
3952 symlinkat = 36,
3953 linkat = 37,
3954 umount2 = 39,
3955 mount = 40,
3956 pivot_root = 41,
3957 nfsservctl = 42,
3958 statfs = 43,
3959 fstatfs = 44,
3960 truncate = 45,
3961 ftruncate = 46,
3962 fallocate = 47,
3963 faccessat = 48,
3964 chdir = 49,
3965 fchdir = 50,
3966 chroot = 51,
3967 fchmod = 52,
3968 fchmodat = 53,
3969 fchownat = 54,
3970 fchown = 55,
3971 openat = 56,
3972 close = 57,
3973 vhangup = 58,
3974 pipe2 = 59,
3975 quotactl = 60,
3976 getdents64 = 61,
3977 lseek = 62,
3978 read = 63,
3979 write = 64,
3980 readv = 65,
3981 writev = 66,
3982 pread64 = 67,
3983 pwrite64 = 68,
3984 preadv = 69,
3985 pwritev = 70,
3986 sendfile = 71,
3987 pselect6 = 72,
3988 ppoll = 73,
3989 signalfd4 = 74,
3990 vmsplice = 75,
3991 splice = 76,
3992 tee = 77,
3993 readlinkat = 78,
3994 sync = 81,
3995 fsync = 82,
3996 fdatasync = 83,
3997 sync_file_range = 84,
3998 timerfd_create = 85,
3999 timerfd_settime = 86,
4000 timerfd_gettime = 87,
4001 utimensat = 88,
4002 acct = 89,
4003 capget = 90,
4004 capset = 91,
4005 personality = 92,
4006 exit = 93,
4007 exit_group = 94,
4008 waitid = 95,
4009 set_tid_address = 96,
4010 unshare = 97,
4011 futex = 98,
4012 set_robust_list = 99,
4013 get_robust_list = 100,
4014 nanosleep = 101,
4015 getitimer = 102,
4016 setitimer = 103,
4017 kexec_load = 104,
4018 init_module = 105,
4019 delete_module = 106,
4020 timer_create = 107,
4021 timer_gettime = 108,
4022 timer_getoverrun = 109,
4023 timer_settime = 110,
4024 timer_delete = 111,
4025 clock_settime = 112,
4026 clock_gettime = 113,
4027 clock_getres = 114,
4028 clock_nanosleep = 115,
4029 syslog = 116,
4030 ptrace = 117,
4031 sched_setparam = 118,
4032 sched_setscheduler = 119,
4033 sched_getscheduler = 120,
4034 sched_getparam = 121,
4035 sched_setaffinity = 122,
4036 sched_getaffinity = 123,
4037 sched_yield = 124,
4038 sched_get_priority_max = 125,
4039 sched_get_priority_min = 126,
4040 sched_rr_get_interval = 127,
4041 restart_syscall = 128,
4042 kill = 129,
4043 tkill = 130,
4044 tgkill = 131,
4045 sigaltstack = 132,
4046 rt_sigsuspend = 133,
4047 rt_sigaction = 134,
4048 rt_sigprocmask = 135,
4049 rt_sigpending = 136,
4050 rt_sigtimedwait = 137,
4051 rt_sigqueueinfo = 138,
4052 rt_sigreturn = 139,
4053 setpriority = 140,
4054 getpriority = 141,
4055 reboot = 142,
4056 setregid = 143,
4057 setgid = 144,
4058 setreuid = 145,
4059 setuid = 146,
4060 setresuid = 147,
4061 getresuid = 148,
4062 setresgid = 149,
4063 getresgid = 150,
4064 setfsuid = 151,
4065 setfsgid = 152,
4066 times = 153,
4067 setpgid = 154,
4068 getpgid = 155,
4069 getsid = 156,
4070 setsid = 157,
4071 getgroups = 158,
4072 setgroups = 159,
4073 uname = 160,
4074 sethostname = 161,
4075 setdomainname = 162,
4076 getrusage = 165,
4077 umask = 166,
4078 prctl = 167,
4079 getcpu = 168,
4080 gettimeofday = 169,
4081 settimeofday = 170,
4082 adjtimex = 171,
4083 getpid = 172,
4084 getppid = 173,
4085 getuid = 174,
4086 geteuid = 175,
4087 getgid = 176,
4088 getegid = 177,
4089 gettid = 178,
4090 sysinfo = 179,
4091 mq_open = 180,
4092 mq_unlink = 181,
4093 mq_timedsend = 182,
4094 mq_timedreceive = 183,
4095 mq_notify = 184,
4096 mq_getsetattr = 185,
4097 msgget = 186,
4098 msgctl = 187,
4099 msgrcv = 188,
4100 msgsnd = 189,
4101 semget = 190,
4102 semctl = 191,
4103 semtimedop = 192,
4104 semop = 193,
4105 shmget = 194,
4106 shmctl = 195,
4107 shmat = 196,
4108 shmdt = 197,
4109 socket = 198,
4110 socketpair = 199,
4111 bind = 200,
4112 listen = 201,
4113 accept = 202,
4114 connect = 203,
4115 getsockname = 204,
4116 getpeername = 205,
4117 sendto = 206,
4118 recvfrom = 207,
4119 setsockopt = 208,
4120 getsockopt = 209,
4121 shutdown = 210,
4122 sendmsg = 211,
4123 recvmsg = 212,
4124 readahead = 213,
4125 brk = 214,
4126 munmap = 215,
4127 mremap = 216,
4128 add_key = 217,
4129 request_key = 218,
4130 keyctl = 219,
4131 clone = 220,
4132 execve = 221,
4133 mmap = 222,
4134 fadvise64 = 223,
4135 swapon = 224,
4136 swapoff = 225,
4137 mprotect = 226,
4138 msync = 227,
4139 mlock = 228,
4140 munlock = 229,
4141 mlockall = 230,
4142 munlockall = 231,
4143 mincore = 232,
4144 madvise = 233,
4145 remap_file_pages = 234,
4146 mbind = 235,
4147 get_mempolicy = 236,
4148 set_mempolicy = 237,
4149 migrate_pages = 238,
4150 move_pages = 239,
4151 rt_tgsigqueueinfo = 240,
4152 perf_event_open = 241,
4153 accept4 = 242,
4154 recvmmsg = 243,
4155 wait4 = 260,
4156 prlimit64 = 261,
4157 fanotify_init = 262,
4158 fanotify_mark = 263,
4159 name_to_handle_at = 264,
4160 open_by_handle_at = 265,
4161 clock_adjtime = 266,
4162 syncfs = 267,
4163 setns = 268,
4164 sendmmsg = 269,
4165 process_vm_readv = 270,
4166 process_vm_writev = 271,
4167 kcmp = 272,
4168 finit_module = 273,
4169 sched_setattr = 274,
4170 sched_getattr = 275,
4171 renameat2 = 276,
4172 seccomp = 277,
4173 getrandom = 278,
4174 memfd_create = 279,
4175 bpf = 280,
4176 execveat = 281,
4177 userfaultfd = 282,
4178 membarrier = 283,
4179 mlock2 = 284,
4180 copy_file_range = 285,
4181 preadv2 = 286,
4182 pwritev2 = 287,
4183 pkey_mprotect = 288,
4184 pkey_alloc = 289,
4185 pkey_free = 290,
4186 statx = 291,
4187 io_pgetevents = 292,
4188 rseq = 293,
4189 kexec_file_load = 294,
4190 pidfd_send_signal = 424,
4191 io_uring_setup = 425,
4192 io_uring_enter = 426,
4193 io_uring_register = 427,
4194 open_tree = 428,
4195 move_mount = 429,
4196 fsopen = 430,
4197 fsconfig = 431,
4198 fsmount = 432,
4199 fspick = 433,
4200 pidfd_open = 434,
4201 clone3 = 435,
4202 close_range = 436,
4203 openat2 = 437,
4204 pidfd_getfd = 438,
4205 faccessat2 = 439,
4206 process_madvise = 440,
4207 epoll_pwait2 = 441,
4208 mount_setattr = 442,
4209 quotactl_fd = 443,
4210 landlock_create_ruleset = 444,
4211 landlock_add_rule = 445,
4212 landlock_restrict_self = 446,
4213 process_mrelease = 448,
4214 futex_waitv = 449,
4215 set_mempolicy_home_node = 450,
4216 cachestat = 451,
4217 fchmodat2 = 452,
4218 map_shadow_stack = 453,
4219 futex_wake = 454,
4220 futex_wait = 455,
4221 futex_requeue = 456,
4222};
tools/generate_linux_syscalls.zig+64
......@@ -362,6 +362,70 @@ pub fn main() !void {
362362 \\
363363 );
364364 }
365 {
366 try writer.writeAll(
367 \\
368 \\pub const LoongArch64 = enum(usize) {
369 \\
370 );
371
372 const child_args = [_][]const u8{
373 zig_exe,
374 "cc",
375 "-march=loongarch64",
376 "-target",
377 "loongarch64-linux-gnu",
378 "-E",
379 "-dD",
380 "-P",
381 "-nostdinc",
382 "-Iinclude",
383 "-Iinclude/uapi",
384 "arch/loongarch/include/uapi/asm/unistd.h",
385 };
386
387 const child_result = try std.process.Child.run(.{
388 .allocator = allocator,
389 .argv = &child_args,
390 .cwd = linux_path,
391 .cwd_dir = linux_dir,
392 });
393 if (child_result.stderr.len > 0) std.debug.print("{s}\n", .{child_result.stderr});
394
395 const defines = switch (child_result.term) {
396 .Exited => |code| if (code == 0) child_result.stdout else {
397 std.debug.print("zig cc exited with code {d}\n", .{code});
398 std.process.exit(1);
399 },
400 else => {
401 std.debug.print("zig cc crashed\n", .{});
402 std.process.exit(1);
403 },
404 };
405
406 var lines = mem.tokenizeScalar(u8, defines, '\n');
407 loop: while (lines.next()) |line| {
408 var fields = mem.tokenizeAny(u8, line, " \t");
409 const cmd = fields.next() orelse return error.Incomplete;
410 if (!mem.eql(u8, cmd, "#define")) continue;
411 const define = fields.next() orelse return error.Incomplete;
412 const number = fields.next() orelse continue;
413
414 if (!std.ascii.isDigit(number[0])) continue;
415 if (!mem.startsWith(u8, define, "__NR")) continue;
416 const name = mem.trimLeft(u8, mem.trimLeft(u8, define, "__NR3264_"), "__NR_");
417 if (mem.eql(u8, name, "arch_specific_syscall")) continue;
418 if (mem.eql(u8, name, "syscalls")) break :loop;
419
420 const fixed_name = if (stdlib_renames.get(name)) |fixed| fixed else name;
421 try writer.print(" {p} = {s},\n", .{ zig.fmtId(fixed_name), number });
422 }
423
424 try writer.writeAll(
425 \\};
426 \\
427 );
428 }
365429
366430 try buf_out.flush();
367431}