authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-17 12:07:51+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-10-17 12:07:51+02:00
log1f8a72175b5352e77b41ed4d165acccad08ffb16
treed573a9ef3ad64fc8e257fe7a736e57e50c2d8e2d
parent3091efaa1845bf049ce1d4aaacb95e3b1e346453
parent29fb9e4da7d60f32f7efe6d280a69e020cd117a7
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #25610 from alexrp/std-os-linux-cleanup

`std.os.linux`: some miscellaneous cleanup in arch bits

20 files changed, 1155 insertions(+), 1457 deletions(-)

lib/std/os/linux.zig+93-16
......@@ -32,21 +32,27 @@ test {
3232}
3333
3434const arch_bits = switch (native_arch) {
35 .x86 => @import("linux/x86.zig"),
36 .x86_64 => @import("linux/x86_64.zig"),
3735 .aarch64, .aarch64_be => @import("linux/aarch64.zig"),
3836 .arm, .armeb, .thumb, .thumbeb => @import("linux/arm.zig"),
3937 .hexagon => @import("linux/hexagon.zig"),
40 .riscv32 => @import("linux/riscv32.zig"),
41 .riscv64 => @import("linux/riscv64.zig"),
42 .sparc64 => @import("linux/sparc64.zig"),
4338 .loongarch64 => @import("linux/loongarch64.zig"),
4439 .m68k => @import("linux/m68k.zig"),
4540 .mips, .mipsel => @import("linux/mips.zig"),
46 .mips64, .mips64el => @import("linux/mips64.zig"),
41 .mips64, .mips64el => switch (builtin.abi) {
42 .gnuabin32, .muslabin32 => @import("linux/mipsn32.zig"),
43 else => @import("linux/mips64.zig"),
44 },
4745 .powerpc, .powerpcle => @import("linux/powerpc.zig"),
4846 .powerpc64, .powerpc64le => @import("linux/powerpc64.zig"),
47 .riscv32 => @import("linux/riscv32.zig"),
48 .riscv64 => @import("linux/riscv64.zig"),
4949 .s390x => @import("linux/s390x.zig"),
50 .sparc64 => @import("linux/sparc64.zig"),
51 .x86 => @import("linux/x86.zig"),
52 .x86_64 => switch (builtin.abi) {
53 .gnux32, .muslx32 => @import("linux/x32.zig"),
54 else => @import("linux/x86_64.zig"),
55 },
5056 else => struct {},
5157};
5258
......@@ -88,9 +94,6 @@ pub fn clone(
8894}
8995
9096pub const ARCH = arch_bits.ARCH;
91pub const Elf_Symndx = arch_bits.Elf_Symndx;
92pub const F = arch_bits.F;
93pub const Flock = arch_bits.Flock;
9497pub const HWCAP = arch_bits.HWCAP;
9598pub const SC = arch_bits.SC;
9699pub const Stat = arch_bits.Stat;
......@@ -103,8 +106,6 @@ pub const mode_t = arch_bits.mode_t;
103106pub const nlink_t = arch_bits.nlink_t;
104107pub const off_t = arch_bits.off_t;
105108pub const time_t = arch_bits.time_t;
106pub const timeval = arch_bits.timeval;
107pub const timezone = arch_bits.timezone;
108109pub const user_desc = arch_bits.user_desc;
109110
110111pub const tls = @import("linux/tls.zig");
......@@ -113,10 +114,10 @@ pub const IOCTL = @import("linux/ioctl.zig");
113114pub const SECCOMP = @import("linux/seccomp.zig");
114115
115116pub const syscalls = @import("linux/syscalls.zig");
116pub const SYS = switch (@import("builtin").cpu.arch) {
117pub const SYS = switch (native_arch) {
117118 .arc => syscalls.Arc,
118 .arm, .armeb, .thumb, .thumbeb => syscalls.Arm,
119119 .aarch64, .aarch64_be => syscalls.Arm64,
120 .arm, .armeb, .thumb, .thumbeb => syscalls.Arm,
120121 .csky => syscalls.CSky,
121122 .hexagon => syscalls.Hexagon,
122123 .loongarch64 => syscalls.LoongArch64,
......@@ -126,20 +127,20 @@ pub const SYS = switch (@import("builtin").cpu.arch) {
126127 .gnuabin32, .muslabin32 => syscalls.MipsN32,
127128 else => syscalls.MipsN64,
128129 },
130 .or1k => syscalls.OpenRisc,
131 .powerpc, .powerpcle => syscalls.PowerPC,
132 .powerpc64, .powerpc64le => syscalls.PowerPC64,
129133 .riscv32 => syscalls.RiscV32,
130134 .riscv64 => syscalls.RiscV64,
131135 .s390x => syscalls.S390x,
132136 .sparc => syscalls.Sparc,
133137 .sparc64 => syscalls.Sparc64,
134 .powerpc, .powerpcle => syscalls.PowerPC,
135 .powerpc64, .powerpc64le => syscalls.PowerPC64,
136138 .x86 => syscalls.X86,
137139 .x86_64 => switch (builtin.abi) {
138140 .gnux32, .muslx32 => syscalls.X32,
139141 else => syscalls.X64,
140142 },
141143 .xtensa => syscalls.Xtensa,
142 .or1k => syscalls.OpenRisc,
143144 else => @compileError("The Zig Standard Library is missing syscall definitions for the target CPU architecture"),
144145};
145146
......@@ -1600,6 +1601,70 @@ pub fn waitid(id_type: P, id: i32, infop: *siginfo_t, flags: u32) usize {
16001601 return syscall5(.waitid, @intFromEnum(id_type), @as(usize, @bitCast(@as(isize, id))), @intFromPtr(infop), flags, 0);
16011602}
16021603
1604pub const F = struct {
1605 pub const DUPFD = 0;
1606 pub const GETFD = 1;
1607 pub const SETFD = 2;
1608 pub const GETFL = 3;
1609 pub const SETFL = 4;
1610
1611 pub const GETLK = GET_SET_LK.GETLK;
1612 pub const SETLK = GET_SET_LK.SETLK;
1613 pub const SETLKW = GET_SET_LK.SETLKW;
1614
1615 const GET_SET_LK = if (@sizeOf(usize) == 64) extern struct {
1616 pub const GETLK = if (is_mips) 14 else if (is_sparc) 7 else 5;
1617 pub const SETLK = if (is_mips) 6 else if (is_sparc) 8 else 6;
1618 pub const SETLKW = if (is_mips) 7 else if (is_sparc) 9 else 7;
1619 } else extern struct {
1620 // Ensure that 32-bit code uses the large-file variants (GETLK64, etc).
1621
1622 pub const GETLK = if (is_mips) 33 else 12;
1623 pub const SETLK = if (is_mips) 34 else 13;
1624 pub const SETLKW = if (is_mips) 35 else 14;
1625 };
1626
1627 pub const SETOWN = if (is_mips) 24 else if (is_sparc) 6 else 8;
1628 pub const GETOWN = if (is_mips) 23 else if (is_sparc) 5 else 9;
1629
1630 pub const SETSIG = 10;
1631 pub const GETSIG = 11;
1632
1633 pub const SETOWN_EX = 15;
1634 pub const GETOWN_EX = 16;
1635
1636 pub const GETOWNER_UIDS = 17;
1637
1638 pub const OFD_GETLK = 36;
1639 pub const OFD_SETLK = 37;
1640 pub const OFD_SETLKW = 38;
1641
1642 pub const RDLCK = if (is_sparc) 1 else 0;
1643 pub const WRLCK = if (is_sparc) 2 else 1;
1644 pub const UNLCK = if (is_sparc) 3 else 2;
1645};
1646
1647pub const F_OWNER = enum(i32) {
1648 TID = 0,
1649 PID = 1,
1650 PGRP = 2,
1651 _,
1652};
1653
1654pub const f_owner_ex = extern struct {
1655 type: F_OWNER,
1656 pid: pid_t,
1657};
1658
1659pub const Flock = extern struct {
1660 type: i16,
1661 whence: i16,
1662 start: off_t,
1663 len: off_t,
1664 pid: pid_t,
1665 _unused: if (is_sparc) i16 else void,
1666};
1667
16031668pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) usize {
16041669 if (@hasField(SYS, "fcntl64")) {
16051670 return syscall3(.fcntl64, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, cmd))), arg);
......@@ -1612,6 +1677,8 @@ pub fn flock(fd: fd_t, operation: i32) usize {
16121677 return syscall2(.flock, @as(usize, @bitCast(@as(isize, fd))), @as(usize, @bitCast(@as(isize, operation))));
16131678}
16141679
1680pub const Elf_Symndx = if (native_arch == .s390x) u64 else u32;
1681
16151682// We must follow the C calling convention when we call into the VDSO
16161683const VdsoClockGettime = *align(1) const fn (clockid_t, *timespec) callconv(.c) usize;
16171684var vdso_clock_gettime: ?VdsoClockGettime = &init_vdso_clock_gettime;
......@@ -8361,6 +8428,16 @@ pub const POSIX_FADV = switch (native_arch) {
83618428 },
83628429};
83638430
8431pub const timeval = extern struct {
8432 tv_sec: isize,
8433 tv_usec: i64,
8434};
8435
8436pub const timezone = extern struct {
8437 minuteswest: i32,
8438 dsttime: i32,
8439};
8440
83648441/// The timespec struct used by the kernel.
83658442pub const kernel_timespec = extern struct {
83668443 sec: i64,
lib/std/os/linux/aarch64.zig+38-97
......@@ -1,46 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const sockaddr = linux.sockaddr;
8const iovec = std.posix.iovec;
9const iovec_const = std.posix.iovec_const;
10const uid_t = linux.uid_t;
11const gid_t = linux.gid_t;
12const pid_t = linux.pid_t;
13const stack_t = linux.stack_t;
14const sigset_t = linux.sigset_t;
15const timespec = std.os.linux.timespec;
16
17pub fn syscall0(number: SYS) usize {
3const SYS = std.os.linux.SYS;
4
5pub fn syscall0(number: SYS) u64 {
186 return asm volatile ("svc #0"
19 : [ret] "={x0}" (-> usize),
7 : [ret] "={x0}" (-> u64),
208 : [number] "{x8}" (@intFromEnum(number)),
219 : .{ .memory = true });
2210}
2311
24pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u64) u64 {
2513 return asm volatile ("svc #0"
26 : [ret] "={x0}" (-> usize),
14 : [ret] "={x0}" (-> u64),
2715 : [number] "{x8}" (@intFromEnum(number)),
2816 [arg1] "{x0}" (arg1),
2917 : .{ .memory = true });
3018}
3119
32pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
3321 return asm volatile ("svc #0"
34 : [ret] "={x0}" (-> usize),
22 : [ret] "={x0}" (-> u64),
3523 : [number] "{x8}" (@intFromEnum(number)),
3624 [arg1] "{x0}" (arg1),
3725 [arg2] "{x1}" (arg2),
3826 : .{ .memory = true });
3927}
4028
41pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
4230 return asm volatile ("svc #0"
43 : [ret] "={x0}" (-> usize),
31 : [ret] "={x0}" (-> u64),
4432 : [number] "{x8}" (@intFromEnum(number)),
4533 [arg1] "{x0}" (arg1),
4634 [arg2] "{x1}" (arg2),
......@@ -48,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4836 : .{ .memory = true });
4937}
5038
51pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
5240 return asm volatile ("svc #0"
53 : [ret] "={x0}" (-> usize),
41 : [ret] "={x0}" (-> u64),
5442 : [number] "{x8}" (@intFromEnum(number)),
5543 [arg1] "{x0}" (arg1),
5644 [arg2] "{x1}" (arg2),
......@@ -59,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5947 : .{ .memory = true });
6048}
6149
62pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
6351 return asm volatile ("svc #0"
64 : [ret] "={x0}" (-> usize),
52 : [ret] "={x0}" (-> u64),
6553 : [number] "{x8}" (@intFromEnum(number)),
6654 [arg1] "{x0}" (arg1),
6755 [arg2] "{x1}" (arg2),
......@@ -73,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7361
7462pub fn syscall6(
7563 number: SYS,
76 arg1: usize,
77 arg2: usize,
78 arg3: usize,
79 arg4: usize,
80 arg5: usize,
81 arg6: usize,
82) usize {
64 arg1: u64,
65 arg2: u64,
66 arg3: u64,
67 arg4: u64,
68 arg5: u64,
69 arg6: u64,
70) u64 {
8371 return asm volatile ("svc #0"
84 : [ret] "={x0}" (-> usize),
72 : [ret] "={x0}" (-> u64),
8573 : [number] "{x8}" (@intFromEnum(number)),
8674 [arg1] "{x0}" (arg1),
8775 [arg2] "{x1}" (arg2),
......@@ -92,7 +80,7 @@ pub fn syscall6(
9280 : .{ .memory = true });
9381}
9482
95pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u64 {
9684 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9785 // x0, x1, w2, x3, x4, x5, x6
9886 //
......@@ -135,7 +123,7 @@ pub fn clone() callconv(.naked) usize {
135123pub const restore = restore_rt;
136124
137125pub fn restore_rt() callconv(.naked) noreturn {
138 switch (@import("builtin").zig_backend) {
126 switch (builtin.zig_backend) {
139127 .stage2_c => asm volatile (
140128 \\ mov x8, %[number]
141129 \\ svc #0
......@@ -150,54 +138,19 @@ pub fn restore_rt() callconv(.naked) noreturn {
150138 }
151139}
152140
153pub const F = struct {
154 pub const DUPFD = 0;
155 pub const GETFD = 1;
156 pub const SETFD = 2;
157 pub const GETFL = 3;
158 pub const SETFL = 4;
159
160 pub const SETOWN = 8;
161 pub const GETOWN = 9;
162 pub const SETSIG = 10;
163 pub const GETSIG = 11;
164
165 pub const GETLK = 5;
166 pub const SETLK = 6;
167 pub const SETLKW = 7;
168
169 pub const RDLCK = 0;
170 pub const WRLCK = 1;
171 pub const UNLCK = 2;
172
173 pub const SETOWN_EX = 15;
174 pub const GETOWN_EX = 16;
175
176 pub const GETOWNER_UIDS = 17;
177};
178
179141pub const VDSO = struct {
180142 pub const CGT_SYM = "__kernel_clock_gettime";
181143 pub const CGT_VER = "LINUX_2.6.39";
182144};
183145
184pub const Flock = extern struct {
185 type: i16,
186 whence: i16,
187 start: off_t,
188 len: off_t,
189 pid: pid_t,
190 __unused: [4]u8,
191};
192
193146pub const blksize_t = i32;
194147pub const nlink_t = u32;
195pub const time_t = isize;
148pub const time_t = i64;
196149pub const mode_t = u32;
197pub const off_t = isize;
198pub const ino_t = usize;
199pub const dev_t = usize;
200pub const blkcnt_t = isize;
150pub const off_t = i64;
151pub const ino_t = u64;
152pub const dev_t = u64;
153pub const blkcnt_t = i64;
201154
202155// The `stat` definition used by the Linux kernel.
203156pub const Stat = extern struct {
......@@ -205,40 +158,28 @@ pub const Stat = extern struct {
205158 ino: ino_t,
206159 mode: mode_t,
207160 nlink: nlink_t,
208 uid: uid_t,
209 gid: gid_t,
161 uid: std.os.linux.uid_t,
162 gid: std.os.linux.gid_t,
210163 rdev: dev_t,
211 __pad: usize,
164 __pad: u64,
212165 size: off_t,
213166 blksize: blksize_t,
214167 __pad2: i32,
215168 blocks: blkcnt_t,
216 atim: timespec,
217 mtim: timespec,
218 ctim: timespec,
169 atim: std.os.linux.timespec,
170 mtim: std.os.linux.timespec,
171 ctim: std.os.linux.timespec,
219172 __unused: [2]u32,
220173
221 pub fn atime(self: @This()) timespec {
174 pub fn atime(self: @This()) std.os.linux.timespec {
222175 return self.atim;
223176 }
224177
225 pub fn mtime(self: @This()) timespec {
178 pub fn mtime(self: @This()) std.os.linux.timespec {
226179 return self.mtim;
227180 }
228181
229 pub fn ctime(self: @This()) timespec {
182 pub fn ctime(self: @This()) std.os.linux.timespec {
230183 return self.ctim;
231184 }
232185};
233
234pub const timeval = extern struct {
235 sec: isize,
236 usec: isize,
237};
238
239pub const timezone = extern struct {
240 minuteswest: i32,
241 dsttime: i32,
242};
243
244pub const Elf_Symndx = u32;
lib/std/os/linux/arm.zig+36-95
......@@ -1,45 +1,34 @@
1const builtin = @import("builtin");
12const std = @import("../../std.zig");
2const maxInt = std.math.maxInt;
3const linux = std.os.linux;
4const SYS = linux.SYS;
5const iovec = std.posix.iovec;
6const iovec_const = std.posix.iovec_const;
7const socklen_t = linux.socklen_t;
8const stack_t = linux.stack_t;
9const sigset_t = linux.sigset_t;
10const uid_t = linux.uid_t;
11const gid_t = linux.gid_t;
12const pid_t = linux.pid_t;
13const sockaddr = linux.sockaddr;
14const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
154
16pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
176 return asm volatile ("svc #0"
18 : [ret] "={r0}" (-> usize),
7 : [ret] "={r0}" (-> u32),
198 : [number] "{r7}" (@intFromEnum(number)),
209 : .{ .memory = true });
2110}
2211
23pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u32) u32 {
2413 return asm volatile ("svc #0"
25 : [ret] "={r0}" (-> usize),
14 : [ret] "={r0}" (-> u32),
2615 : [number] "{r7}" (@intFromEnum(number)),
2716 [arg1] "{r0}" (arg1),
2817 : .{ .memory = true });
2918}
3019
31pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
3221 return asm volatile ("svc #0"
33 : [ret] "={r0}" (-> usize),
22 : [ret] "={r0}" (-> u32),
3423 : [number] "{r7}" (@intFromEnum(number)),
3524 [arg1] "{r0}" (arg1),
3625 [arg2] "{r1}" (arg2),
3726 : .{ .memory = true });
3827}
3928
40pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
4130 return asm volatile ("svc #0"
42 : [ret] "={r0}" (-> usize),
31 : [ret] "={r0}" (-> u32),
4332 : [number] "{r7}" (@intFromEnum(number)),
4433 [arg1] "{r0}" (arg1),
4534 [arg2] "{r1}" (arg2),
......@@ -47,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4736 : .{ .memory = true });
4837}
4938
50pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
5140 return asm volatile ("svc #0"
52 : [ret] "={r0}" (-> usize),
41 : [ret] "={r0}" (-> u32),
5342 : [number] "{r7}" (@intFromEnum(number)),
5443 [arg1] "{r0}" (arg1),
5544 [arg2] "{r1}" (arg2),
......@@ -58,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5847 : .{ .memory = true });
5948}
6049
61pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
6251 return asm volatile ("svc #0"
63 : [ret] "={r0}" (-> usize),
52 : [ret] "={r0}" (-> u32),
6453 : [number] "{r7}" (@intFromEnum(number)),
6554 [arg1] "{r0}" (arg1),
6655 [arg2] "{r1}" (arg2),
......@@ -72,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7261
7362pub fn syscall6(
7463 number: SYS,
75 arg1: usize,
76 arg2: usize,
77 arg3: usize,
78 arg4: usize,
79 arg5: usize,
80 arg6: usize,
81) usize {
64 arg1: u32,
65 arg2: u32,
66 arg3: u32,
67 arg4: u32,
68 arg5: u32,
69 arg6: u32,
70) u32 {
8271 return asm volatile ("svc #0"
83 : [ret] "={r0}" (-> usize),
72 : [ret] "={r0}" (-> u32),
8473 : [number] "{r7}" (@intFromEnum(number)),
8574 [arg1] "{r0}" (arg1),
8675 [arg2] "{r1}" (arg2),
......@@ -91,7 +80,7 @@ pub fn syscall6(
9180 : .{ .memory = true });
9281}
9382
94pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u32 {
9584 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9685 // r0, r1, r2, r3, +0, +4, +8
9786 //
......@@ -128,23 +117,23 @@ pub fn clone() callconv(.naked) usize {
128117}
129118
130119pub fn restore() callconv(.naked) noreturn {
131 switch (@import("builtin").zig_backend) {
120 switch (builtin.zig_backend) {
132121 .stage2_c => asm volatile (
133122 \\ mov r7, %[number]
134123 \\ svc #0
135124 :
136125 : [number] "I" (@intFromEnum(SYS.sigreturn)),
137 : .{ .memory = true }),
126 ),
138127 else => asm volatile (
139128 \\ svc #0
140129 :
141130 : [number] "{r7}" (@intFromEnum(SYS.sigreturn)),
142 : .{ .memory = true }),
131 ),
143132 }
144133}
145134
146135pub fn restore_rt() callconv(.naked) noreturn {
147 switch (@import("builtin").zig_backend) {
136 switch (builtin.zig_backend) {
148137 .stage2_c => asm volatile (
149138 \\ mov r7, %[number]
150139 \\ svc #0
......@@ -159,32 +148,6 @@ pub fn restore_rt() callconv(.naked) noreturn {
159148 }
160149}
161150
162pub const F = struct {
163 pub const DUPFD = 0;
164 pub const GETFD = 1;
165 pub const SETFD = 2;
166 pub const GETFL = 3;
167 pub const SETFL = 4;
168
169 pub const SETOWN = 8;
170 pub const GETOWN = 9;
171 pub const SETSIG = 10;
172 pub const GETSIG = 11;
173
174 pub const GETLK = 12;
175 pub const SETLK = 13;
176 pub const SETLKW = 14;
177
178 pub const RDLCK = 0;
179 pub const WRLCK = 1;
180 pub const UNLCK = 2;
181
182 pub const SETOWN_EX = 15;
183 pub const GETOWN_EX = 16;
184
185 pub const GETOWNER_UIDS = 17;
186};
187
188151pub const VDSO = struct {
189152 pub const CGT_SYM = "__vdso_clock_gettime";
190153 pub const CGT_VER = "LINUX_2.6";
......@@ -216,19 +179,9 @@ pub const HWCAP = struct {
216179 pub const EVTSTRM = 1 << 21;
217180};
218181
219pub const Flock = extern struct {
220 type: i16,
221 whence: i16,
222 __pad0: [4]u8,
223 start: off_t,
224 len: off_t,
225 pid: pid_t,
226 __unused: [4]u8,
227};
228
229182pub const blksize_t = i32;
230183pub const nlink_t = u32;
231pub const time_t = isize;
184pub const time_t = i32;
232185pub const mode_t = u32;
233186pub const off_t = i64;
234187pub const ino_t = u64;
......@@ -242,39 +195,27 @@ pub const Stat = extern struct {
242195 __ino_truncated: u32,
243196 mode: mode_t,
244197 nlink: nlink_t,
245 uid: uid_t,
246 gid: gid_t,
198 uid: std.os.linux.uid_t,
199 gid: std.os.linux.gid_t,
247200 rdev: dev_t,
248201 __rdev_padding: u32,
249202 size: off_t,
250203 blksize: blksize_t,
251204 blocks: blkcnt_t,
252 atim: timespec,
253 mtim: timespec,
254 ctim: timespec,
205 atim: std.os.linux.timespec,
206 mtim: std.os.linux.timespec,
207 ctim: std.os.linux.timespec,
255208 ino: ino_t,
256209
257 pub fn atime(self: @This()) timespec {
210 pub fn atime(self: @This()) std.os.linux.timespec {
258211 return self.atim;
259212 }
260213
261 pub fn mtime(self: @This()) timespec {
214 pub fn mtime(self: @This()) std.os.linux.timespec {
262215 return self.mtim;
263216 }
264217
265 pub fn ctime(self: @This()) timespec {
218 pub fn ctime(self: @This()) std.os.linux.timespec {
266219 return self.ctim;
267220 }
268221};
269
270pub const timeval = extern struct {
271 sec: i32,
272 usec: i32,
273};
274
275pub const timezone = extern struct {
276 minuteswest: i32,
277 dsttime: i32,
278};
279
280pub const Elf_Symndx = u32;
lib/std/os/linux/hexagon.zig+30-81
......@@ -1,45 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const iovec = std.posix.iovec;
4const iovec_const = std.posix.iovec_const;
5const linux = std.os.linux;
6const SYS = linux.SYS;
7const uid_t = std.os.linux.uid_t;
8const gid_t = std.os.linux.gid_t;
9const pid_t = std.os.linux.pid_t;
10const sockaddr = linux.sockaddr;
11const socklen_t = linux.socklen_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const timespec = std.os.linux.timespec;
3const SYS = std.os.linux.SYS;
154
16pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
176 return asm volatile ("trap0(#1)"
18 : [ret] "={r0}" (-> usize),
7 : [ret] "={r0}" (-> u32),
198 : [number] "{r6}" (@intFromEnum(number)),
209 : .{ .memory = true });
2110}
2211
23pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u32) u32 {
2413 return asm volatile ("trap0(#1)"
25 : [ret] "={r0}" (-> usize),
14 : [ret] "={r0}" (-> u32),
2615 : [number] "{r6}" (@intFromEnum(number)),
2716 [arg1] "{r0}" (arg1),
2817 : .{ .memory = true });
2918}
3019
31pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
3221 return asm volatile ("trap0(#1)"
33 : [ret] "={r0}" (-> usize),
22 : [ret] "={r0}" (-> u32),
3423 : [number] "{r6}" (@intFromEnum(number)),
3524 [arg1] "{r0}" (arg1),
3625 [arg2] "{r1}" (arg2),
3726 : .{ .memory = true });
3827}
3928
40pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
4130 return asm volatile ("trap0(#1)"
42 : [ret] "={r0}" (-> usize),
31 : [ret] "={r0}" (-> u32),
4332 : [number] "{r6}" (@intFromEnum(number)),
4433 [arg1] "{r0}" (arg1),
4534 [arg2] "{r1}" (arg2),
......@@ -47,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4736 : .{ .memory = true });
4837}
4938
50pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
5140 return asm volatile ("trap0(#1)"
52 : [ret] "={r0}" (-> usize),
41 : [ret] "={r0}" (-> u32),
5342 : [number] "{r6}" (@intFromEnum(number)),
5443 [arg1] "{r0}" (arg1),
5544 [arg2] "{r1}" (arg2),
......@@ -58,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5847 : .{ .memory = true });
5948}
6049
61pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
6251 return asm volatile ("trap0(#1)"
63 : [ret] "={r0}" (-> usize),
52 : [ret] "={r0}" (-> u32),
6453 : [number] "{r6}" (@intFromEnum(number)),
6554 [arg1] "{r0}" (arg1),
6655 [arg2] "{r1}" (arg2),
......@@ -72,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7261
7362pub fn syscall6(
7463 number: SYS,
75 arg1: usize,
76 arg2: usize,
77 arg3: usize,
78 arg4: usize,
79 arg5: usize,
80 arg6: usize,
81) usize {
64 arg1: u32,
65 arg2: u32,
66 arg3: u32,
67 arg4: u32,
68 arg5: u32,
69 arg6: u32,
70) u32 {
8271 return asm volatile ("trap0(#1)"
83 : [ret] "={r0}" (-> usize),
72 : [ret] "={r0}" (-> u32),
8473 : [number] "{r6}" (@intFromEnum(number)),
8574 [arg1] "{r0}" (arg1),
8675 [arg2] "{r1}" (arg2),
......@@ -91,7 +80,7 @@ pub fn syscall6(
9180 : .{ .memory = true });
9281}
9382
94pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u32 {
9584 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9685 // r0, r1, r2, r3, r4, r5, +0
9786 //
......@@ -130,44 +119,6 @@ pub fn clone() callconv(.naked) usize {
130119 );
131120}
132121
133pub const F = struct {
134 pub const DUPFD = 0;
135 pub const GETFD = 1;
136 pub const SETFD = 2;
137 pub const GETFL = 3;
138 pub const SETFL = 4;
139 pub const GETLK = 5;
140 pub const SETLK = 6;
141 pub const SETLKW = 7;
142 pub const SETOWN = 8;
143 pub const GETOWN = 9;
144 pub const SETSIG = 10;
145 pub const GETSIG = 11;
146
147 pub const RDLCK = 0;
148 pub const WRLCK = 1;
149 pub const UNLCK = 2;
150
151 pub const SETOWN_EX = 15;
152 pub const GETOWN_EX = 16;
153
154 pub const GETOWNER_UIDS = 17;
155};
156
157pub const timeval = extern struct {
158 sec: time_t,
159 usec: i32,
160};
161
162pub const Flock = extern struct {
163 type: i16,
164 whence: i16,
165 start: off_t,
166 len: off_t,
167 pid: pid_t,
168 __unused: [4]u8,
169};
170
171122pub const blksize_t = i32;
172123pub const nlink_t = u32;
173124pub const time_t = i64;
......@@ -183,32 +134,30 @@ pub const Stat = extern struct {
183134 ino: ino_t,
184135 mode: mode_t,
185136 nlink: nlink_t,
186 uid: uid_t,
187 gid: gid_t,
137 uid: std.os.linux.uid_t,
138 gid: std.os.linux.gid_t,
188139 rdev: dev_t,
189140 __pad: u32,
190141 size: off_t,
191142 blksize: blksize_t,
192143 __pad2: i32,
193144 blocks: blkcnt_t,
194 atim: timespec,
195 mtim: timespec,
196 ctim: timespec,
145 atim: std.os.linux.timespec,
146 mtim: std.os.linux.timespec,
147 ctim: std.os.linux.timespec,
197148 __unused: [2]u32,
198149
199 pub fn atime(self: @This()) timespec {
150 pub fn atime(self: @This()) std.os.linux.timespec {
200151 return self.atim;
201152 }
202153
203 pub fn mtime(self: @This()) timespec {
154 pub fn mtime(self: @This()) std.os.linux.timespec {
204155 return self.mtim;
205156 }
206157
207 pub fn ctime(self: @This()) timespec {
158 pub fn ctime(self: @This()) std.os.linux.timespec {
208159 return self.ctim;
209160 }
210161};
211162
212pub const Elf_Symndx = u32;
213
214163pub const VDSO = void;
lib/std/os/linux/loongarch64.zig+30-71
......@@ -1,48 +1,38 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const linux = std.os.linux;
4const SYS = linux.SYS;
5const iovec = std.posix.iovec;
6const iovec_const = std.posix.iovec_const;
7const uid_t = linux.uid_t;
8const gid_t = linux.gid_t;
9const stack_t = linux.stack_t;
10const sigset_t = linux.sigset_t;
11const sockaddr = linux.sockaddr;
12const socklen_t = linux.socklen_t;
13const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
144
15pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u64 {
166 return asm volatile (
177 \\ syscall 0
18 : [ret] "={$r4}" (-> usize),
8 : [ret] "={$r4}" (-> u64),
199 : [number] "{$r11}" (@intFromEnum(number)),
2010 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
2111}
2212
23pub fn syscall1(number: SYS, arg1: usize) usize {
13pub fn syscall1(number: SYS, arg1: u64) u64 {
2414 return asm volatile (
2515 \\ syscall 0
26 : [ret] "={$r4}" (-> usize),
16 : [ret] "={$r4}" (-> u64),
2717 : [number] "{$r11}" (@intFromEnum(number)),
2818 [arg1] "{$r4}" (arg1),
2919 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
3020}
3121
32pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
22pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
3323 return asm volatile (
3424 \\ syscall 0
35 : [ret] "={$r4}" (-> usize),
25 : [ret] "={$r4}" (-> u64),
3626 : [number] "{$r11}" (@intFromEnum(number)),
3727 [arg1] "{$r4}" (arg1),
3828 [arg2] "{$r5}" (arg2),
3929 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
4030}
4131
42pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
32pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
4333 return asm volatile (
4434 \\ syscall 0
45 : [ret] "={$r4}" (-> usize),
35 : [ret] "={$r4}" (-> u64),
4636 : [number] "{$r11}" (@intFromEnum(number)),
4737 [arg1] "{$r4}" (arg1),
4838 [arg2] "{$r5}" (arg2),
......@@ -50,10 +40,10 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
5040 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
5141}
5242
53pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
43pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
5444 return asm volatile (
5545 \\ syscall 0
56 : [ret] "={$r4}" (-> usize),
46 : [ret] "={$r4}" (-> u64),
5747 : [number] "{$r11}" (@intFromEnum(number)),
5848 [arg1] "{$r4}" (arg1),
5949 [arg2] "{$r5}" (arg2),
......@@ -62,10 +52,10 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
6252 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
6353}
6454
65pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
55pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
6656 return asm volatile (
6757 \\ syscall 0
68 : [ret] "={$r4}" (-> usize),
58 : [ret] "={$r4}" (-> u64),
6959 : [number] "{$r11}" (@intFromEnum(number)),
7060 [arg1] "{$r4}" (arg1),
7161 [arg2] "{$r5}" (arg2),
......@@ -77,16 +67,16 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7767
7868pub fn syscall6(
7969 number: SYS,
80 arg1: usize,
81 arg2: usize,
82 arg3: usize,
83 arg4: usize,
84 arg5: usize,
85 arg6: usize,
86) usize {
70 arg1: u64,
71 arg2: u64,
72 arg3: u64,
73 arg4: u64,
74 arg5: u64,
75 arg6: u64,
76) u64 {
8777 return asm volatile (
8878 \\ syscall 0
89 : [ret] "={$r4}" (-> usize),
79 : [ret] "={$r4}" (-> u64),
9080 : [number] "{$r11}" (@intFromEnum(number)),
9181 [arg1] "{$r4}" (arg1),
9282 [arg2] "{$r5}" (arg2),
......@@ -97,7 +87,7 @@ pub fn syscall6(
9787 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
9888}
9989
100pub fn clone() callconv(.naked) usize {
90pub fn clone() callconv(.naked) u64 {
10191 // __clone(func, stack, flags, arg, ptid, tls, ctid)
10292 // a0, a1, a2, a3, a4, a5, a6
10393 // sys_clone(flags, stack, ptid, ctid, tls)
......@@ -150,64 +140,33 @@ pub const Stat = extern struct {
150140 ino: ino_t,
151141 mode: mode_t,
152142 nlink: nlink_t,
153 uid: uid_t,
154 gid: gid_t,
143 uid: std.os.linux.uid_t,
144 gid: std.os.linux.gid_t,
155145 rdev: dev_t,
156146 _pad1: u64,
157147 size: off_t,
158148 blksize: blksize_t,
159149 _pad2: i32,
160150 blocks: blkcnt_t,
161 atim: timespec,
162 mtim: timespec,
163 ctim: timespec,
151 atim: std.os.linux.timespec,
152 mtim: std.os.linux.timespec,
153 ctim: std.os.linux.timespec,
164154 _pad3: [2]u32,
165155
166 pub fn atime(self: @This()) timespec {
156 pub fn atime(self: @This()) std.os.linux.timespec {
167157 return self.atim;
168158 }
169159
170 pub fn mtime(self: @This()) timespec {
160 pub fn mtime(self: @This()) std.os.linux.timespec {
171161 return self.mtim;
172162 }
173163
174 pub fn ctime(self: @This()) timespec {
164 pub fn ctime(self: @This()) std.os.linux.timespec {
175165 return self.ctim;
176166 }
177167};
178168
179pub const timeval = extern struct {
180 tv_sec: time_t,
181 tv_usec: i64,
182};
183
184pub const F = struct {
185 pub const DUPFD = 0;
186 pub const GETFD = 1;
187 pub const SETFD = 2;
188 pub const GETFL = 3;
189 pub const SETFL = 4;
190 pub const GETLK = 5;
191 pub const SETLK = 6;
192 pub const SETLKW = 7;
193 pub const SETOWN = 8;
194 pub const GETOWN = 9;
195 pub const SETSIG = 10;
196 pub const GETSIG = 11;
197
198 pub const RDLCK = 0;
199 pub const WRLCK = 1;
200 pub const UNLCK = 2;
201
202 pub const SETOWN_EX = 15;
203 pub const GETOWN_EX = 16;
204
205 pub const GETOWNER_UIDS = 17;
206};
207
208169pub const VDSO = struct {
209170 pub const CGT_SYM = "__vdso_clock_gettime";
210171 pub const CGT_VER = "LINUX_5.10";
211172};
212
213pub const Elf_Symndx = u32;
lib/std/os/linux/m68k.zig+31-81
......@@ -1,43 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const iovec = std.posix.iovec;
4const iovec_const = std.posix.iovec_const;
5const linux = std.os.linux;
6const SYS = linux.SYS;
7const uid_t = std.os.linux.uid_t;
8const gid_t = std.os.linux.uid_t;
9const pid_t = std.os.linux.pid_t;
10const sockaddr = linux.sockaddr;
11const socklen_t = linux.socklen_t;
12const timespec = std.os.linux.timespec;
13
14pub fn syscall0(number: SYS) usize {
3const SYS = std.os.linux.SYS;
4
5pub fn syscall0(number: SYS) u32 {
156 return asm volatile ("trap #0"
16 : [ret] "={d0}" (-> usize),
7 : [ret] "={d0}" (-> u32),
178 : [number] "{d0}" (@intFromEnum(number)),
189 : .{ .memory = true });
1910}
2011
21pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u32) u32 {
2213 return asm volatile ("trap #0"
23 : [ret] "={d0}" (-> usize),
14 : [ret] "={d0}" (-> u32),
2415 : [number] "{d0}" (@intFromEnum(number)),
2516 [arg1] "{d1}" (arg1),
2617 : .{ .memory = true });
2718}
2819
29pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
3021 return asm volatile ("trap #0"
31 : [ret] "={d0}" (-> usize),
22 : [ret] "={d0}" (-> u32),
3223 : [number] "{d0}" (@intFromEnum(number)),
3324 [arg1] "{d1}" (arg1),
3425 [arg2] "{d2}" (arg2),
3526 : .{ .memory = true });
3627}
3728
38pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
3930 return asm volatile ("trap #0"
40 : [ret] "={d0}" (-> usize),
31 : [ret] "={d0}" (-> u32),
4132 : [number] "{d0}" (@intFromEnum(number)),
4233 [arg1] "{d1}" (arg1),
4334 [arg2] "{d2}" (arg2),
......@@ -45,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4536 : .{ .memory = true });
4637}
4738
48pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
4940 return asm volatile ("trap #0"
50 : [ret] "={d0}" (-> usize),
41 : [ret] "={d0}" (-> u32),
5142 : [number] "{d0}" (@intFromEnum(number)),
5243 [arg1] "{d1}" (arg1),
5344 [arg2] "{d2}" (arg2),
......@@ -56,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5647 : .{ .memory = true });
5748}
5849
59pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
6051 return asm volatile ("trap #0"
61 : [ret] "={d0}" (-> usize),
52 : [ret] "={d0}" (-> u32),
6253 : [number] "{d0}" (@intFromEnum(number)),
6354 [arg1] "{d1}" (arg1),
6455 [arg2] "{d2}" (arg2),
......@@ -70,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7061
7162pub fn syscall6(
7263 number: SYS,
73 arg1: usize,
74 arg2: usize,
75 arg3: usize,
76 arg4: usize,
77 arg5: usize,
78 arg6: usize,
79) usize {
64 arg1: u32,
65 arg2: u32,
66 arg3: u32,
67 arg4: u32,
68 arg5: u32,
69 arg6: u32,
70) u32 {
8071 return asm volatile ("trap #0"
81 : [ret] "={d0}" (-> usize),
72 : [ret] "={d0}" (-> u32),
8273 : [number] "{d0}" (@intFromEnum(number)),
8374 [arg1] "{d1}" (arg1),
8475 [arg2] "{d2}" (arg2),
......@@ -89,7 +80,7 @@ pub fn syscall6(
8980 : .{ .memory = true });
9081}
9182
92pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u32 {
9384 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9485 // +4, +8, +12, +16, +20, +24, +28
9586 //
......@@ -151,32 +142,6 @@ pub fn restore_rt() callconv(.naked) noreturn {
151142 );
152143}
153144
154pub const F = struct {
155 pub const DUPFD = 0;
156 pub const GETFD = 1;
157 pub const SETFD = 2;
158 pub const GETFL = 3;
159 pub const SETFL = 4;
160
161 pub const SETOWN = 8;
162 pub const GETOWN = 9;
163 pub const SETSIG = 10;
164 pub const GETSIG = 11;
165
166 pub const GETLK = 12;
167 pub const SETLK = 13;
168 pub const SETLKW = 14;
169
170 pub const SETOWN_EX = 15;
171 pub const GETOWN_EX = 16;
172
173 pub const GETOWNER_UIDS = 17;
174
175 pub const RDLCK = 0;
176 pub const WRLCK = 1;
177 pub const UNLCK = 2;
178};
179
180145pub const blksize_t = i32;
181146pub const nlink_t = u32;
182147pub const time_t = i32;
......@@ -186,51 +151,36 @@ pub const ino_t = u64;
186151pub const dev_t = u64;
187152pub const blkcnt_t = i64;
188153
189pub const timeval = extern struct {
190 sec: time_t,
191 usec: i32,
192};
193
194pub const Flock = extern struct {
195 type: i16,
196 whence: i16,
197 start: off_t,
198 len: off_t,
199 pid: pid_t,
200};
201
202154pub const Stat = extern struct {
203155 dev: dev_t,
204156 __pad: i16,
205157 __ino_truncated: i32,
206158 mode: mode_t,
207159 nlink: nlink_t,
208 uid: uid_t,
209 gid: gid_t,
160 uid: std.os.linux.uid_t,
161 gid: std.os.linux.gid_t,
210162 rdev: dev_t,
211163 __pad2: i16,
212164 size: off_t,
213165 blksize: blksize_t,
214166 blocks: blkcnt_t,
215 atim: timespec,
216 mtim: timespec,
217 ctim: timespec,
167 atim: std.os.linux.timespec,
168 mtim: std.os.linux.timespec,
169 ctim: std.os.linux.timespec,
218170 ino: ino_t,
219171
220 pub fn atime(self: @This()) timespec {
172 pub fn atime(self: @This()) std.os.linux.timespec {
221173 return self.atim;
222174 }
223175
224 pub fn mtime(self: @This()) timespec {
176 pub fn mtime(self: @This()) std.os.linux.timespec {
225177 return self.mtim;
226178 }
227179
228 pub fn ctime(self: @This()) timespec {
180 pub fn ctime(self: @This()) std.os.linux.timespec {
229181 return self.ctim;
230182 }
231183};
232184
233pub const Elf_Symndx = u32;
234
235185// No VDSO used as of glibc 112a0ae18b831bf31f44d81b82666980312511d6.
236186pub const VDSO = void;
lib/std/os/linux/mips.zig+44-116
......@@ -1,32 +1,20 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const iovec = std.posix.iovec;
8const iovec_const = std.posix.iovec_const;
9const uid_t = linux.uid_t;
10const gid_t = linux.gid_t;
11const pid_t = linux.pid_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const sockaddr = linux.sockaddr;
15const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
164
17pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
186 return asm volatile (
197 \\ syscall
208 \\ beq $7, $zero, 1f
219 \\ blez $2, 1f
2210 \\ subu $2, $0, $2
2311 \\ 1:
24 : [ret] "={$2}" (-> usize),
12 : [ret] "={$2}" (-> u32),
2513 : [number] "{$2}" (@intFromEnum(number)),
2614 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
2715}
2816
29pub fn syscall_pipe(fd: *[2]i32) usize {
17pub fn syscall_pipe(fd: *[2]i32) u32 {
3018 return asm volatile (
3119 \\ .set noat
3220 \\ .set noreorder
......@@ -39,47 +27,47 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
3927 \\ sw $2, 0($4)
4028 \\ sw $3, 4($4)
4129 \\ 2:
42 : [ret] "={$2}" (-> usize),
30 : [ret] "={$2}" (-> u32),
4331 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
4432 [fd] "{$4}" (fd),
4533 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
4634}
4735
48pub fn syscall1(number: SYS, arg1: usize) usize {
36pub fn syscall1(number: SYS, arg1: u32) u32 {
4937 return asm volatile (
5038 \\ syscall
5139 \\ beq $7, $zero, 1f
5240 \\ blez $2, 1f
5341 \\ subu $2, $0, $2
5442 \\ 1:
55 : [ret] "={$2}" (-> usize),
43 : [ret] "={$2}" (-> u32),
5644 : [number] "{$2}" (@intFromEnum(number)),
5745 [arg1] "{$4}" (arg1),
5846 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
5947}
6048
61pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
49pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
6250 return asm volatile (
6351 \\ syscall
6452 \\ beq $7, $zero, 1f
6553 \\ blez $2, 1f
6654 \\ subu $2, $0, $2
6755 \\ 1:
68 : [ret] "={$2}" (-> usize),
56 : [ret] "={$2}" (-> u32),
6957 : [number] "{$2}" (@intFromEnum(number)),
7058 [arg1] "{$4}" (arg1),
7159 [arg2] "{$5}" (arg2),
7260 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
7361}
7462
75pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
63pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
7664 return asm volatile (
7765 \\ syscall
7866 \\ beq $7, $zero, 1f
7967 \\ blez $2, 1f
8068 \\ subu $2, $0, $2
8169 \\ 1:
82 : [ret] "={$2}" (-> usize),
70 : [ret] "={$2}" (-> u32),
8371 : [number] "{$2}" (@intFromEnum(number)),
8472 [arg1] "{$4}" (arg1),
8573 [arg2] "{$5}" (arg2),
......@@ -87,14 +75,14 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
8775 : .{ .r1 = true, .r3 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
8876}
8977
90pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
78pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
9179 return asm volatile (
9280 \\ syscall
9381 \\ beq $7, $zero, 1f
9482 \\ blez $2, 1f
9583 \\ subu $2, $0, $2
9684 \\ 1:
97 : [ret] "={$2}" (-> usize),
85 : [ret] "={$2}" (-> u32),
9886 : [number] "{$2}" (@intFromEnum(number)),
9987 [arg1] "{$4}" (arg1),
10088 [arg2] "{$5}" (arg2),
......@@ -103,7 +91,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
10391 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
10492}
10593
106pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
94pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
10795 return asm volatile (
10896 \\ .set noat
10997 \\ subu $sp, $sp, 24
......@@ -114,7 +102,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
114102 \\ blez $2, 1f
115103 \\ subu $2, $0, $2
116104 \\ 1:
117 : [ret] "={$2}" (-> usize),
105 : [ret] "={$2}" (-> u32),
118106 : [number] "{$2}" (@intFromEnum(number)),
119107 [arg1] "{$4}" (arg1),
120108 [arg2] "{$5}" (arg2),
......@@ -129,13 +117,13 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
129117
130118pub fn syscall6(
131119 number: SYS,
132 arg1: usize,
133 arg2: usize,
134 arg3: usize,
135 arg4: usize,
136 arg5: usize,
137 arg6: usize,
138) usize {
120 arg1: u32,
121 arg2: u32,
122 arg3: u32,
123 arg4: u32,
124 arg5: u32,
125 arg6: u32,
126) u32 {
139127 return asm volatile (
140128 \\ .set noat
141129 \\ subu $sp, $sp, 24
......@@ -147,7 +135,7 @@ pub fn syscall6(
147135 \\ blez $2, 1f
148136 \\ subu $2, $0, $2
149137 \\ 1:
150 : [ret] "={$2}" (-> usize),
138 : [ret] "={$2}" (-> u32),
151139 : [number] "{$2}" (@intFromEnum(number)),
152140 [arg1] "{$4}" (arg1),
153141 [arg2] "{$5}" (arg2),
......@@ -160,14 +148,14 @@ pub fn syscall6(
160148
161149pub fn syscall7(
162150 number: SYS,
163 arg1: usize,
164 arg2: usize,
165 arg3: usize,
166 arg4: usize,
167 arg5: usize,
168 arg6: usize,
169 arg7: usize,
170) usize {
151 arg1: u32,
152 arg2: u32,
153 arg3: u32,
154 arg4: u32,
155 arg5: u32,
156 arg6: u32,
157 arg7: u32,
158) u32 {
171159 return asm volatile (
172160 \\ .set noat
173161 \\ subu $sp, $sp, 32
......@@ -180,7 +168,7 @@ pub fn syscall7(
180168 \\ blez $2, 1f
181169 \\ subu $2, $0, $2
182170 \\ 1:
183 : [ret] "={$2}" (-> usize),
171 : [ret] "={$2}" (-> u32),
184172 : [number] "{$2}" (@intFromEnum(number)),
185173 [arg1] "{$4}" (arg1),
186174 [arg2] "{$5}" (arg2),
......@@ -192,7 +180,7 @@ pub fn syscall7(
192180 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
193181}
194182
195pub fn clone() callconv(.naked) usize {
183pub fn clone() callconv(.naked) u32 {
196184 // __clone(func, stack, flags, arg, ptid, tls, ctid)
197185 // 3, 4, 5, 6, 7, 8, 9
198186 //
......@@ -243,47 +231,11 @@ pub fn clone() callconv(.naked) usize {
243231 );
244232}
245233
246pub const F = struct {
247 pub const DUPFD = 0;
248 pub const GETFD = 1;
249 pub const SETFD = 2;
250 pub const GETFL = 3;
251 pub const SETFL = 4;
252
253 pub const SETOWN = 24;
254 pub const GETOWN = 23;
255 pub const SETSIG = 10;
256 pub const GETSIG = 11;
257
258 pub const GETLK = 33;
259 pub const SETLK = 34;
260 pub const SETLKW = 35;
261
262 pub const RDLCK = 0;
263 pub const WRLCK = 1;
264 pub const UNLCK = 2;
265
266 pub const SETOWN_EX = 15;
267 pub const GETOWN_EX = 16;
268
269 pub const GETOWNER_UIDS = 17;
270};
271
272234pub const VDSO = struct {
273235 pub const CGT_SYM = "__vdso_clock_gettime";
274236 pub const CGT_VER = "LINUX_2.6";
275237};
276238
277pub const Flock = extern struct {
278 type: i16,
279 whence: i16,
280 __pad0: [4]u8,
281 start: off_t,
282 len: off_t,
283 pid: pid_t,
284 __unused: [4]u8,
285};
286
287239pub const blksize_t = u32;
288240pub const nlink_t = u32;
289241pub const time_t = i32;
......@@ -300,51 +252,27 @@ pub const Stat = extern struct {
300252 ino: ino_t,
301253 mode: mode_t,
302254 nlink: nlink_t,
303 uid: uid_t,
304 gid: gid_t,
255 uid: std.os.linux.uid_t,
256 gid: std.os.linux.gid_t,
305257 rdev: dev_t,
306258 __pad1: [2]u32,
307259 size: off_t,
308 atim: i32,
309 atim_nsec: i32,
310 mtim: i32,
311 mtim_nsec: i32,
312 ctim: i32,
313 ctim_nsec: i32,
260 atim: std.os.linux.timespec,
261 mtim: std.os.linux.timespec,
262 ctim: std.os.linux.timespec,
314263 blksize: blksize_t,
315264 __pad3: u32,
316265 blocks: blkcnt_t,
317266
318 pub fn atime(self: @This()) timespec {
319 return .{
320 .sec = self.atim,
321 .nsec = self.atim_nsec,
322 };
267 pub fn atime(self: @This()) std.os.linux.timespec {
268 return self.atim;
323269 }
324270
325 pub fn mtime(self: @This()) timespec {
326 return .{
327 .sec = self.mtim,
328 .nsec = self.mtim_nsec,
329 };
271 pub fn mtime(self: @This()) std.os.linux.timespec {
272 return self.mtim;
330273 }
331274
332 pub fn ctime(self: @This()) timespec {
333 return .{
334 .sec = self.ctim,
335 .nsec = self.ctim_nsec,
336 };
275 pub fn ctime(self: @This()) std.os.linux.timespec {
276 return self.ctim;
337277 }
338278};
339
340pub const timeval = extern struct {
341 sec: isize,
342 usec: isize,
343};
344
345pub const timezone = extern struct {
346 minuteswest: i32,
347 dsttime: i32,
348};
349
350pub const Elf_Symndx = u32;
lib/std/os/linux/mips64.zig+38-98
......@@ -1,32 +1,20 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const iovec = std.posix.iovec;
8const iovec_const = std.posix.iovec_const;
9const uid_t = linux.uid_t;
10const gid_t = linux.gid_t;
11const pid_t = linux.pid_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const sockaddr = linux.sockaddr;
15const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
164
17pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u64 {
186 return asm volatile (
197 \\ syscall
208 \\ beq $7, $zero, 1f
219 \\ blez $2, 1f
2210 \\ dsubu $2, $0, $2
2311 \\ 1:
24 : [ret] "={$2}" (-> usize),
12 : [ret] "={$2}" (-> u64),
2513 : [number] "{$2}" (@intFromEnum(number)),
2614 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
2715}
2816
29pub fn syscall_pipe(fd: *[2]i32) usize {
17pub fn syscall_pipe(fd: *[2]i32) u64 {
3018 return asm volatile (
3119 \\ .set noat
3220 \\ .set noreorder
......@@ -39,13 +27,13 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
3927 \\ sw $2, 0($4)
4028 \\ sw $3, 4($4)
4129 \\ 2:
42 : [ret] "={$2}" (-> usize),
30 : [ret] "={$2}" (-> u64),
4331 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
4432 [fd] "{$4}" (fd),
4533 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
4634}
4735
48pub fn syscall1(number: SYS, arg1: usize) usize {
36pub fn syscall1(number: SYS, arg1: u64) u64 {
4937 return asm volatile (
5038 \\ syscall
5139 \\ beq $7, $zero, 1f
......@@ -53,34 +41,34 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
5341 \\ nop
5442 \\ dsubu $2, $0, $2
5543 \\ 1:
56 : [ret] "={$2}" (-> usize),
44 : [ret] "={$2}" (-> u64),
5745 : [number] "{$2}" (@intFromEnum(number)),
5846 [arg1] "{$4}" (arg1),
5947 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
6048}
6149
62pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
50pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
6351 return asm volatile (
6452 \\ syscall
6553 \\ beq $7, $zero, 1f
6654 \\ blez $2, 1f
6755 \\ dsubu $2, $0, $2
6856 \\ 1:
69 : [ret] "={$2}" (-> usize),
57 : [ret] "={$2}" (-> u64),
7058 : [number] "{$2}" (@intFromEnum(number)),
7159 [arg1] "{$4}" (arg1),
7260 [arg2] "{$5}" (arg2),
7361 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
7462}
7563
76pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
64pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
7765 return asm volatile (
7866 \\ syscall
7967 \\ beq $7, $zero, 1f
8068 \\ blez $2, 1f
8169 \\ dsubu $2, $0, $2
8270 \\ 1:
83 : [ret] "={$2}" (-> usize),
71 : [ret] "={$2}" (-> u64),
8472 : [number] "{$2}" (@intFromEnum(number)),
8573 [arg1] "{$4}" (arg1),
8674 [arg2] "{$5}" (arg2),
......@@ -88,14 +76,14 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
8876 : .{ .r1 = true, .r3 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
8977}
9078
91pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
79pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
9280 return asm volatile (
9381 \\ syscall
9482 \\ beq $7, $zero, 1f
9583 \\ blez $2, 1f
9684 \\ dsubu $2, $0, $2
9785 \\ 1:
98 : [ret] "={$2}" (-> usize),
86 : [ret] "={$2}" (-> u64),
9987 : [number] "{$2}" (@intFromEnum(number)),
10088 [arg1] "{$4}" (arg1),
10189 [arg2] "{$5}" (arg2),
......@@ -104,14 +92,14 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
10492 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
10593}
10694
107pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
95pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
10896 return asm volatile (
10997 \\ syscall
11098 \\ beq $7, $zero, 1f
11199 \\ blez $2, 1f
112100 \\ dsubu $2, $0, $2
113101 \\ 1:
114 : [ret] "={$2}" (-> usize),
102 : [ret] "={$2}" (-> u64),
115103 : [number] "{$2}" (@intFromEnum(number)),
116104 [arg1] "{$4}" (arg1),
117105 [arg2] "{$5}" (arg2),
......@@ -123,20 +111,20 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
123111
124112pub fn syscall6(
125113 number: SYS,
126 arg1: usize,
127 arg2: usize,
128 arg3: usize,
129 arg4: usize,
130 arg5: usize,
131 arg6: usize,
132) usize {
114 arg1: u64,
115 arg2: u64,
116 arg3: u64,
117 arg4: u64,
118 arg5: u64,
119 arg6: u64,
120) u64 {
133121 return asm volatile (
134122 \\ syscall
135123 \\ beq $7, $zero, 1f
136124 \\ blez $2, 1f
137125 \\ dsubu $2, $0, $2
138126 \\ 1:
139 : [ret] "={$2}" (-> usize),
127 : [ret] "={$2}" (-> u64),
140128 : [number] "{$2}" (@intFromEnum(number)),
141129 [arg1] "{$4}" (arg1),
142130 [arg2] "{$5}" (arg2),
......@@ -149,21 +137,21 @@ pub fn syscall6(
149137
150138pub fn syscall7(
151139 number: SYS,
152 arg1: usize,
153 arg2: usize,
154 arg3: usize,
155 arg4: usize,
156 arg5: usize,
157 arg6: usize,
158 arg7: usize,
159) usize {
140 arg1: u64,
141 arg2: u64,
142 arg3: u64,
143 arg4: u64,
144 arg5: u64,
145 arg6: u64,
146 arg7: u64,
147) u64 {
160148 return asm volatile (
161149 \\ syscall
162150 \\ beq $7, $zero, 1f
163151 \\ blez $2, 1f
164152 \\ dsubu $2, $0, $2
165153 \\ 1:
166 : [ret] "={$2}" (-> usize),
154 : [ret] "={$2}" (-> u64),
167155 : [number] "{$2}" (@intFromEnum(number)),
168156 [arg1] "{$4}" (arg1),
169157 [arg2] "{$5}" (arg2),
......@@ -175,7 +163,7 @@ pub fn syscall7(
175163 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
176164}
177165
178pub fn clone() callconv(.naked) usize {
166pub fn clone() callconv(.naked) u64 {
179167 // __clone(func, stack, flags, arg, ptid, tls, ctid)
180168 // 3, 4, 5, 6, 7, 8, 9
181169 //
......@@ -222,47 +210,11 @@ pub fn clone() callconv(.naked) usize {
222210 );
223211}
224212
225pub const F = struct {
226 pub const DUPFD = 0;
227 pub const GETFD = 1;
228 pub const SETFD = 2;
229 pub const GETFL = 3;
230 pub const SETFL = 4;
231
232 pub const SETOWN = 24;
233 pub const GETOWN = 23;
234 pub const SETSIG = 10;
235 pub const GETSIG = 11;
236
237 pub const GETLK = 33;
238 pub const SETLK = 34;
239 pub const SETLKW = 35;
240
241 pub const RDLCK = 0;
242 pub const WRLCK = 1;
243 pub const UNLCK = 2;
244
245 pub const SETOWN_EX = 15;
246 pub const GETOWN_EX = 16;
247
248 pub const GETOWNER_UIDS = 17;
249};
250
251213pub const VDSO = struct {
252214 pub const CGT_SYM = "__vdso_clock_gettime";
253215 pub const CGT_VER = "LINUX_2.6";
254216};
255217
256pub const Flock = extern struct {
257 type: i16,
258 whence: i16,
259 __pad0: [4]u8,
260 start: off_t,
261 len: off_t,
262 pid: pid_t,
263 __unused: [4]u8,
264};
265
266218pub const blksize_t = u32;
267219pub const nlink_t = u32;
268220pub const time_t = i32;
......@@ -279,8 +231,8 @@ pub const Stat = extern struct {
279231 ino: ino_t,
280232 mode: mode_t,
281233 nlink: nlink_t,
282 uid: uid_t,
283 gid: gid_t,
234 uid: std.os.linux.uid_t,
235 gid: std.os.linux.gid_t,
284236 rdev: dev_t,
285237 __pad1: [2]u32, // -1 because our dev_t is u64 (kernel dev_t is really u32).
286238 size: off_t,
......@@ -294,36 +246,24 @@ pub const Stat = extern struct {
294246 __pad3: u32,
295247 blocks: blkcnt_t,
296248
297 pub fn atime(self: @This()) timespec {
249 pub fn atime(self: @This()) std.os.linux.timespec {
298250 return .{
299251 .sec = self.atim,
300252 .nsec = self.atim_nsec,
301253 };
302254 }
303255
304 pub fn mtime(self: @This()) timespec {
256 pub fn mtime(self: @This()) std.os.linux.timespec {
305257 return .{
306258 .sec = self.mtim,
307259 .nsec = self.mtim_nsec,
308260 };
309261 }
310262
311 pub fn ctime(self: @This()) timespec {
263 pub fn ctime(self: @This()) std.os.linux.timespec {
312264 return .{
313265 .sec = self.ctim,
314266 .nsec = self.ctim_nsec,
315267 };
316268 }
317269};
318
319pub const timeval = extern struct {
320 sec: isize,
321 usec: isize,
322};
323
324pub const timezone = extern struct {
325 minuteswest: i32,
326 dsttime: i32,
327};
328
329pub const Elf_Symndx = u32;
lib/std/os/linux/mipsn32.zig created+271
......@@ -0,0 +1,271 @@
1// TODO: A lot of this file is very likely wrong.
2
3const builtin = @import("builtin");
4const std = @import("../../std.zig");
5const SYS = std.os.linux.SYS;
6
7pub fn syscall0(number: SYS) u32 {
8 return asm volatile (
9 \\ syscall
10 \\ beq $7, $zero, 1f
11 \\ blez $2, 1f
12 \\ dsubu $2, $0, $2
13 \\ 1:
14 : [ret] "={$2}" (-> u32),
15 : [number] "{$2}" (@intFromEnum(number)),
16 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
17}
18
19pub fn syscall_pipe(fd: *[2]i32) u32 {
20 return asm volatile (
21 \\ .set noat
22 \\ .set noreorder
23 \\ syscall
24 \\ beq $7, $zero, 1f
25 \\ nop
26 \\ b 2f
27 \\ subu $2, $0, $2
28 \\ 1:
29 \\ sw $2, 0($4)
30 \\ sw $3, 4($4)
31 \\ 2:
32 : [ret] "={$2}" (-> u32),
33 : [number] "{$2}" (@intFromEnum(SYS.pipe)),
34 [fd] "{$4}" (fd),
35 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
36}
37
38pub fn syscall1(number: SYS, arg1: u32) u32 {
39 return asm volatile (
40 \\ syscall
41 \\ beq $7, $zero, 1f
42 \\ blez $2, 1f
43 \\ nop
44 \\ dsubu $2, $0, $2
45 \\ 1:
46 : [ret] "={$2}" (-> u32),
47 : [number] "{$2}" (@intFromEnum(number)),
48 [arg1] "{$4}" (arg1),
49 : .{ .r1 = true, .r3 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
50}
51
52pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
53 return asm volatile (
54 \\ syscall
55 \\ beq $7, $zero, 1f
56 \\ blez $2, 1f
57 \\ dsubu $2, $0, $2
58 \\ 1:
59 : [ret] "={$2}" (-> u32),
60 : [number] "{$2}" (@intFromEnum(number)),
61 [arg1] "{$4}" (arg1),
62 [arg2] "{$5}" (arg2),
63 : .{ .r1 = true, .r3 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
64}
65
66pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
67 return asm volatile (
68 \\ syscall
69 \\ beq $7, $zero, 1f
70 \\ blez $2, 1f
71 \\ dsubu $2, $0, $2
72 \\ 1:
73 : [ret] "={$2}" (-> u32),
74 : [number] "{$2}" (@intFromEnum(number)),
75 [arg1] "{$4}" (arg1),
76 [arg2] "{$5}" (arg2),
77 [arg3] "{$6}" (arg3),
78 : .{ .r1 = true, .r3 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
79}
80
81pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
82 return asm volatile (
83 \\ syscall
84 \\ beq $7, $zero, 1f
85 \\ blez $2, 1f
86 \\ dsubu $2, $0, $2
87 \\ 1:
88 : [ret] "={$2}" (-> u32),
89 : [number] "{$2}" (@intFromEnum(number)),
90 [arg1] "{$4}" (arg1),
91 [arg2] "{$5}" (arg2),
92 [arg3] "{$6}" (arg3),
93 [arg4] "{$7}" (arg4),
94 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
95}
96
97pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
98 return asm volatile (
99 \\ syscall
100 \\ beq $7, $zero, 1f
101 \\ blez $2, 1f
102 \\ dsubu $2, $0, $2
103 \\ 1:
104 : [ret] "={$2}" (-> u32),
105 : [number] "{$2}" (@intFromEnum(number)),
106 [arg1] "{$4}" (arg1),
107 [arg2] "{$5}" (arg2),
108 [arg3] "{$6}" (arg3),
109 [arg4] "{$7}" (arg4),
110 [arg5] "{$8}" (arg5),
111 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
112}
113
114pub fn syscall6(
115 number: SYS,
116 arg1: u32,
117 arg2: u32,
118 arg3: u32,
119 arg4: u32,
120 arg5: u32,
121 arg6: u32,
122) u32 {
123 return asm volatile (
124 \\ syscall
125 \\ beq $7, $zero, 1f
126 \\ blez $2, 1f
127 \\ dsubu $2, $0, $2
128 \\ 1:
129 : [ret] "={$2}" (-> u32),
130 : [number] "{$2}" (@intFromEnum(number)),
131 [arg1] "{$4}" (arg1),
132 [arg2] "{$5}" (arg2),
133 [arg3] "{$6}" (arg3),
134 [arg4] "{$7}" (arg4),
135 [arg5] "{$8}" (arg5),
136 [arg6] "{$9}" (arg6),
137 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
138}
139
140pub fn syscall7(
141 number: SYS,
142 arg1: u32,
143 arg2: u32,
144 arg3: u32,
145 arg4: u32,
146 arg5: u32,
147 arg6: u32,
148 arg7: u32,
149) u32 {
150 return asm volatile (
151 \\ syscall
152 \\ beq $7, $zero, 1f
153 \\ blez $2, 1f
154 \\ dsubu $2, $0, $2
155 \\ 1:
156 : [ret] "={$2}" (-> u32),
157 : [number] "{$2}" (@intFromEnum(number)),
158 [arg1] "{$4}" (arg1),
159 [arg2] "{$5}" (arg2),
160 [arg3] "{$6}" (arg3),
161 [arg4] "{$7}" (arg4),
162 [arg5] "{$8}" (arg5),
163 [arg6] "{$9}" (arg6),
164 [arg7] "{$10}" (arg7),
165 : .{ .r1 = true, .r3 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
166}
167
168pub fn clone() callconv(.naked) u32 {
169 // __clone(func, stack, flags, arg, ptid, tls, ctid)
170 // 3, 4, 5, 6, 7, 8, 9
171 //
172 // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
173 // 2 4, 5, 6, 7, 8
174 asm volatile (
175 \\ # Save function pointer and argument pointer on new thread stack
176 \\ and $5, $5, -16
177 \\ dsubu $5, $5, 16
178 \\ sd $4, 0($5)
179 \\ sd $7, 8($5)
180 \\ # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
181 \\ move $4, $6
182 \\ move $6, $8
183 \\ move $7, $9
184 \\ move $8, $10
185 \\ li $2, 5055 # SYS_clone
186 \\ syscall
187 \\ beq $7, $0, 1f
188 \\ nop
189 \\ jr $ra
190 \\ dsubu $2, $0, $2
191 \\1:
192 \\ beq $2, $0, 1f
193 \\ nop
194 \\ jr $ra
195 \\ nop
196 \\1:
197 );
198 if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile (
199 \\ .cfi_undefined $ra
200 );
201 asm volatile (
202 \\ move $fp, $zero
203 \\ move $ra, $zero
204 \\
205 \\ ld $25, 0($sp)
206 \\ ld $4, 8($sp)
207 \\ jalr $25
208 \\ nop
209 \\ move $4, $2
210 \\ li $2, 5058 # SYS_exit
211 \\ syscall
212 );
213}
214
215pub const VDSO = struct {
216 pub const CGT_SYM = "__vdso_clock_gettime";
217 pub const CGT_VER = "LINUX_2.6";
218};
219
220pub const blksize_t = u32;
221pub const nlink_t = u32;
222pub const time_t = i32;
223pub const mode_t = u32;
224pub const off_t = i64;
225pub const ino_t = u64;
226pub const dev_t = u64;
227pub const blkcnt_t = i64;
228
229// The `stat` definition used by the Linux kernel.
230pub const Stat = extern struct {
231 dev: dev_t,
232 __pad0: [2]u32, // -1 because our dev_t is u64 (kernel dev_t is really u32).
233 ino: ino_t,
234 mode: mode_t,
235 nlink: nlink_t,
236 uid: std.os.linux.uid_t,
237 gid: std.os.linux.gid_t,
238 rdev: dev_t,
239 __pad1: [2]u32, // -1 because our dev_t is u64 (kernel dev_t is really u32).
240 size: off_t,
241 atim: u32,
242 atim_nsec: u32,
243 mtim: u32,
244 mtim_nsec: u32,
245 ctim: u32,
246 ctim_nsec: u32,
247 blksize: blksize_t,
248 __pad3: u32,
249 blocks: blkcnt_t,
250
251 pub fn atime(self: @This()) std.os.linux.timespec {
252 return .{
253 .sec = self.atim,
254 .nsec = self.atim_nsec,
255 };
256 }
257
258 pub fn mtime(self: @This()) std.os.linux.timespec {
259 return .{
260 .sec = self.mtim,
261 .nsec = self.mtim_nsec,
262 };
263 }
264
265 pub fn ctime(self: @This()) std.os.linux.timespec {
266 return .{
267 .sec = self.ctim,
268 .nsec = self.ctim_nsec,
269 };
270 }
271};
lib/std/os/linux/powerpc.zig+55-113
......@@ -1,61 +1,49 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const iovec = std.posix.iovec;
8const iovec_const = std.posix.iovec_const;
9const uid_t = linux.uid_t;
10const gid_t = linux.gid_t;
11const pid_t = linux.pid_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const sockaddr = linux.sockaddr;
15const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
164
17pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
186 // r0 is both an input register and a clobber. musl and glibc achieve this with
197 // a "+" constraint, which isn't supported in Zig, so instead we separately list
208 // r0 as both an input and an output. (Listing it as an input and a clobber would
219 // cause the C backend to emit invalid code; see #25209.)
22 var r0_out: usize = undefined;
10 var r0_out: u32 = undefined;
2311 return asm volatile (
2412 \\ sc
2513 \\ bns+ 1f
2614 \\ neg 3, 3
2715 \\ 1:
28 : [ret] "={r3}" (-> usize),
16 : [ret] "={r3}" (-> u32),
2917 [r0_out] "={r0}" (r0_out),
3018 : [number] "{r0}" (@intFromEnum(number)),
3119 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
3220}
3321
34pub fn syscall1(number: SYS, arg1: usize) usize {
22pub fn syscall1(number: SYS, arg1: u32) u32 {
3523 // r0 is both an input and a clobber.
36 var r0_out: usize = undefined;
24 var r0_out: u32 = undefined;
3725 return asm volatile (
3826 \\ sc
3927 \\ bns+ 1f
4028 \\ neg 3, 3
4129 \\ 1:
42 : [ret] "={r3}" (-> usize),
30 : [ret] "={r3}" (-> u32),
4331 [r0_out] "={r0}" (r0_out),
4432 : [number] "{r0}" (@intFromEnum(number)),
4533 [arg1] "{r3}" (arg1),
4634 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
4735}
4836
49pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
37pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
5038 // These registers are both inputs and clobbers.
51 var r0_out: usize = undefined;
52 var r4_out: usize = undefined;
39 var r0_out: u32 = undefined;
40 var r4_out: u32 = undefined;
5341 return asm volatile (
5442 \\ sc
5543 \\ bns+ 1f
5644 \\ neg 3, 3
5745 \\ 1:
58 : [ret] "={r3}" (-> usize),
46 : [ret] "={r3}" (-> u32),
5947 [r0_out] "={r0}" (r0_out),
6048 [r4_out] "={r4}" (r4_out),
6149 : [number] "{r0}" (@intFromEnum(number)),
......@@ -64,17 +52,17 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
6452 : .{ .memory = true, .cr0 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
6553}
6654
67pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
55pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
6856 // These registers are both inputs and clobbers.
69 var r0_out: usize = undefined;
70 var r4_out: usize = undefined;
71 var r5_out: usize = undefined;
57 var r0_out: u32 = undefined;
58 var r4_out: u32 = undefined;
59 var r5_out: u32 = undefined;
7260 return asm volatile (
7361 \\ sc
7462 \\ bns+ 1f
7563 \\ neg 3, 3
7664 \\ 1:
77 : [ret] "={r3}" (-> usize),
65 : [ret] "={r3}" (-> u32),
7866 [r0_out] "={r0}" (r0_out),
7967 [r4_out] "={r4}" (r4_out),
8068 [r5_out] "={r5}" (r5_out),
......@@ -85,18 +73,18 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
8573 : .{ .memory = true, .cr0 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
8674}
8775
88pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
76pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
8977 // These registers are both inputs and clobbers.
90 var r0_out: usize = undefined;
91 var r4_out: usize = undefined;
92 var r5_out: usize = undefined;
93 var r6_out: usize = undefined;
78 var r0_out: u32 = undefined;
79 var r4_out: u32 = undefined;
80 var r5_out: u32 = undefined;
81 var r6_out: u32 = undefined;
9482 return asm volatile (
9583 \\ sc
9684 \\ bns+ 1f
9785 \\ neg 3, 3
9886 \\ 1:
99 : [ret] "={r3}" (-> usize),
87 : [ret] "={r3}" (-> u32),
10088 [r0_out] "={r0}" (r0_out),
10189 [r4_out] "={r4}" (r4_out),
10290 [r5_out] "={r5}" (r5_out),
......@@ -109,19 +97,19 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
10997 : .{ .memory = true, .cr0 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
11098}
11199
112pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
100pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
113101 // These registers are both inputs and clobbers.
114 var r0_out: usize = undefined;
115 var r4_out: usize = undefined;
116 var r5_out: usize = undefined;
117 var r6_out: usize = undefined;
118 var r7_out: usize = undefined;
102 var r0_out: u32 = undefined;
103 var r4_out: u32 = undefined;
104 var r5_out: u32 = undefined;
105 var r6_out: u32 = undefined;
106 var r7_out: u32 = undefined;
119107 return asm volatile (
120108 \\ sc
121109 \\ bns+ 1f
122110 \\ neg 3, 3
123111 \\ 1:
124 : [ret] "={r3}" (-> usize),
112 : [ret] "={r3}" (-> u32),
125113 [r0_out] "={r0}" (r0_out),
126114 [r4_out] "={r4}" (r4_out),
127115 [r5_out] "={r5}" (r5_out),
......@@ -138,26 +126,26 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
138126
139127pub fn syscall6(
140128 number: SYS,
141 arg1: usize,
142 arg2: usize,
143 arg3: usize,
144 arg4: usize,
145 arg5: usize,
146 arg6: usize,
147) usize {
129 arg1: u32,
130 arg2: u32,
131 arg3: u32,
132 arg4: u32,
133 arg5: u32,
134 arg6: u32,
135) u32 {
148136 // These registers are both inputs and clobbers.
149 var r0_out: usize = undefined;
150 var r4_out: usize = undefined;
151 var r5_out: usize = undefined;
152 var r6_out: usize = undefined;
153 var r7_out: usize = undefined;
154 var r8_out: usize = undefined;
137 var r0_out: u32 = undefined;
138 var r4_out: u32 = undefined;
139 var r5_out: u32 = undefined;
140 var r6_out: u32 = undefined;
141 var r7_out: u32 = undefined;
142 var r8_out: u32 = undefined;
155143 return asm volatile (
156144 \\ sc
157145 \\ bns+ 1f
158146 \\ neg 3, 3
159147 \\ 1:
160 : [ret] "={r3}" (-> usize),
148 : [ret] "={r3}" (-> u32),
161149 [r0_out] "={r0}" (r0_out),
162150 [r4_out] "={r4}" (r4_out),
163151 [r5_out] "={r5}" (r5_out),
......@@ -174,7 +162,7 @@ pub fn syscall6(
174162 : .{ .memory = true, .cr0 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
175163}
176164
177pub fn clone() callconv(.naked) usize {
165pub fn clone() callconv(.naked) u32 {
178166 // __clone(func, stack, flags, arg, ptid, tls, ctid)
179167 // 3, 4, 5, 6, 7, 8, 9
180168 //
......@@ -247,14 +235,14 @@ pub fn clone() callconv(.naked) usize {
247235pub const restore = restore_rt;
248236
249237pub fn restore_rt() callconv(.naked) noreturn {
250 switch (@import("builtin").zig_backend) {
238 switch (builtin.zig_backend) {
251239 .stage2_c => asm volatile (
252240 \\ li 0, %[number]
253241 \\ sc
254242 :
255243 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
256244 ),
257 else => _ = asm volatile (
245 else => asm volatile (
258246 \\ sc
259247 :
260248 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
......@@ -262,48 +250,14 @@ pub fn restore_rt() callconv(.naked) noreturn {
262250 }
263251}
264252
265pub const F = struct {
266 pub const DUPFD = 0;
267 pub const GETFD = 1;
268 pub const SETFD = 2;
269 pub const GETFL = 3;
270 pub const SETFL = 4;
271
272 pub const SETOWN = 8;
273 pub const GETOWN = 9;
274 pub const SETSIG = 10;
275 pub const GETSIG = 11;
276
277 pub const GETLK = 12;
278 pub const SETLK = 13;
279 pub const SETLKW = 14;
280
281 pub const SETOWN_EX = 15;
282 pub const GETOWN_EX = 16;
283
284 pub const GETOWNER_UIDS = 17;
285
286 pub const RDLCK = 0;
287 pub const WRLCK = 1;
288 pub const UNLCK = 2;
289};
290
291253pub const VDSO = struct {
292254 pub const CGT_SYM = "__kernel_clock_gettime";
293255 pub const CGT_VER = "LINUX_2.6.15";
294256};
295257
296pub const Flock = extern struct {
297 type: i16,
298 whence: i16,
299 start: off_t,
300 len: off_t,
301 pid: pid_t,
302};
303
304258pub const blksize_t = i32;
305259pub const nlink_t = u32;
306pub const time_t = isize;
260pub const time_t = i32;
307261pub const mode_t = u32;
308262pub const off_t = i64;
309263pub const ino_t = u64;
......@@ -316,39 +270,27 @@ pub const Stat = extern struct {
316270 ino: ino_t,
317271 mode: mode_t,
318272 nlink: nlink_t,
319 uid: uid_t,
320 gid: gid_t,
273 uid: std.os.linux.uid_t,
274 gid: std.os.linux.gid_t,
321275 rdev: dev_t,
322276 __rdev_padding: i16,
323277 size: off_t,
324278 blksize: blksize_t,
325279 blocks: blkcnt_t,
326 atim: timespec,
327 mtim: timespec,
328 ctim: timespec,
280 atim: std.os.linux.timespec,
281 mtim: std.os.linux.timespec,
282 ctim: std.os.linux.timespec,
329283 __unused: [2]u32,
330284
331 pub fn atime(self: @This()) timespec {
285 pub fn atime(self: @This()) std.os.linux.timespec {
332286 return self.atim;
333287 }
334288
335 pub fn mtime(self: @This()) timespec {
289 pub fn mtime(self: @This()) std.os.linux.timespec {
336290 return self.mtim;
337291 }
338292
339 pub fn ctime(self: @This()) timespec {
293 pub fn ctime(self: @This()) std.os.linux.timespec {
340294 return self.ctim;
341295 }
342296};
343
344pub const timeval = extern struct {
345 sec: time_t,
346 usec: isize,
347};
348
349pub const timezone = extern struct {
350 minuteswest: i32,
351 dsttime: i32,
352};
353
354pub const Elf_Symndx = u32;
lib/std/os/linux/powerpc64.zig+54-113
......@@ -1,61 +1,49 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const iovec = std.posix.iovec;
8const iovec_const = std.posix.iovec_const;
9const uid_t = linux.uid_t;
10const gid_t = linux.gid_t;
11const pid_t = linux.pid_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const sockaddr = linux.sockaddr;
15const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
164
17pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u64 {
186 // r0 is both an input register and a clobber. musl and glibc achieve this with
197 // a "+" constraint, which isn't supported in Zig, so instead we separately list
208 // r0 as both an input and an output. (Listing it as an input and a clobber would
219 // cause the C backend to emit invalid code; see #25209.)
22 var r0_out: usize = undefined;
10 var r0_out: u64 = undefined;
2311 return asm volatile (
2412 \\ sc
2513 \\ bns+ 1f
2614 \\ neg 3, 3
2715 \\ 1:
28 : [ret] "={r3}" (-> usize),
16 : [ret] "={r3}" (-> u64),
2917 [r0_out] "={r0}" (r0_out),
3018 : [number] "{r0}" (@intFromEnum(number)),
3119 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
3220}
3321
34pub fn syscall1(number: SYS, arg1: usize) usize {
22pub fn syscall1(number: SYS, arg1: u64) u64 {
3523 // r0 is both an input and a clobber.
36 var r0_out: usize = undefined;
24 var r0_out: u64 = undefined;
3725 return asm volatile (
3826 \\ sc
3927 \\ bns+ 1f
4028 \\ neg 3, 3
4129 \\ 1:
42 : [ret] "={r3}" (-> usize),
30 : [ret] "={r3}" (-> u64),
4331 [r0_out] "={r0}" (r0_out),
4432 : [number] "{r0}" (@intFromEnum(number)),
4533 [arg1] "{r3}" (arg1),
4634 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
4735}
4836
49pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
37pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
5038 // These registers are both inputs and clobbers.
51 var r0_out: usize = undefined;
52 var r4_out: usize = undefined;
39 var r0_out: u64 = undefined;
40 var r4_out: u64 = undefined;
5341 return asm volatile (
5442 \\ sc
5543 \\ bns+ 1f
5644 \\ neg 3, 3
5745 \\ 1:
58 : [ret] "={r3}" (-> usize),
46 : [ret] "={r3}" (-> u64),
5947 [r0_out] "={r0}" (r0_out),
6048 [r4_out] "={r4}" (r4_out),
6149 : [number] "{r0}" (@intFromEnum(number)),
......@@ -64,17 +52,17 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
6452 : .{ .memory = true, .cr0 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
6553}
6654
67pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
55pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
6856 // These registers are both inputs and clobbers.
69 var r0_out: usize = undefined;
70 var r4_out: usize = undefined;
71 var r5_out: usize = undefined;
57 var r0_out: u64 = undefined;
58 var r4_out: u64 = undefined;
59 var r5_out: u64 = undefined;
7260 return asm volatile (
7361 \\ sc
7462 \\ bns+ 1f
7563 \\ neg 3, 3
7664 \\ 1:
77 : [ret] "={r3}" (-> usize),
65 : [ret] "={r3}" (-> u64),
7866 [r0_out] "={r0}" (r0_out),
7967 [r4_out] "={r4}" (r4_out),
8068 [r5_out] "={r5}" (r5_out),
......@@ -85,18 +73,18 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
8573 : .{ .memory = true, .cr0 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
8674}
8775
88pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
76pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
8977 // These registers are both inputs and clobbers.
90 var r0_out: usize = undefined;
91 var r4_out: usize = undefined;
92 var r5_out: usize = undefined;
93 var r6_out: usize = undefined;
78 var r0_out: u64 = undefined;
79 var r4_out: u64 = undefined;
80 var r5_out: u64 = undefined;
81 var r6_out: u64 = undefined;
9482 return asm volatile (
9583 \\ sc
9684 \\ bns+ 1f
9785 \\ neg 3, 3
9886 \\ 1:
99 : [ret] "={r3}" (-> usize),
87 : [ret] "={r3}" (-> u64),
10088 [r0_out] "={r0}" (r0_out),
10189 [r4_out] "={r4}" (r4_out),
10290 [r5_out] "={r5}" (r5_out),
......@@ -109,19 +97,19 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
10997 : .{ .memory = true, .cr0 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
11098}
11199
112pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
100pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
113101 // These registers are both inputs and clobbers.
114 var r0_out: usize = undefined;
115 var r4_out: usize = undefined;
116 var r5_out: usize = undefined;
117 var r6_out: usize = undefined;
118 var r7_out: usize = undefined;
102 var r0_out: u64 = undefined;
103 var r4_out: u64 = undefined;
104 var r5_out: u64 = undefined;
105 var r6_out: u64 = undefined;
106 var r7_out: u64 = undefined;
119107 return asm volatile (
120108 \\ sc
121109 \\ bns+ 1f
122110 \\ neg 3, 3
123111 \\ 1:
124 : [ret] "={r3}" (-> usize),
112 : [ret] "={r3}" (-> u64),
125113 [r0_out] "={r0}" (r0_out),
126114 [r4_out] "={r4}" (r4_out),
127115 [r5_out] "={r5}" (r5_out),
......@@ -138,26 +126,26 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
138126
139127pub fn syscall6(
140128 number: SYS,
141 arg1: usize,
142 arg2: usize,
143 arg3: usize,
144 arg4: usize,
145 arg5: usize,
146 arg6: usize,
147) usize {
129 arg1: u64,
130 arg2: u64,
131 arg3: u64,
132 arg4: u64,
133 arg5: u64,
134 arg6: u64,
135) u64 {
148136 // These registers are both inputs and clobbers.
149 var r0_out: usize = undefined;
150 var r4_out: usize = undefined;
151 var r5_out: usize = undefined;
152 var r6_out: usize = undefined;
153 var r7_out: usize = undefined;
154 var r8_out: usize = undefined;
137 var r0_out: u64 = undefined;
138 var r4_out: u64 = undefined;
139 var r5_out: u64 = undefined;
140 var r6_out: u64 = undefined;
141 var r7_out: u64 = undefined;
142 var r8_out: u64 = undefined;
155143 return asm volatile (
156144 \\ sc
157145 \\ bns+ 1f
158146 \\ neg 3, 3
159147 \\ 1:
160 : [ret] "={r3}" (-> usize),
148 : [ret] "={r3}" (-> u64),
161149 [r0_out] "={r0}" (r0_out),
162150 [r4_out] "={r4}" (r4_out),
163151 [r5_out] "={r5}" (r5_out),
......@@ -174,7 +162,7 @@ pub fn syscall6(
174162 : .{ .memory = true, .cr0 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .ctr = true, .xer = true });
175163}
176164
177pub fn clone() callconv(.naked) usize {
165pub fn clone() callconv(.naked) u64 {
178166 // __clone(func, stack, flags, arg, ptid, tls, ctid)
179167 // 3, 4, 5, 6, 7, 8, 9
180168 //
......@@ -232,14 +220,14 @@ pub fn clone() callconv(.naked) usize {
232220pub const restore = restore_rt;
233221
234222pub fn restore_rt() callconv(.naked) noreturn {
235 switch (@import("builtin").zig_backend) {
223 switch (builtin.zig_backend) {
236224 .stage2_c => asm volatile (
237225 \\ li 0, %[number]
238226 \\ sc
239227 :
240228 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
241229 ),
242 else => _ = asm volatile (
230 else => asm volatile (
243231 \\ sc
244232 :
245233 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
......@@ -247,46 +235,11 @@ pub fn restore_rt() callconv(.naked) noreturn {
247235 }
248236}
249237
250pub const F = struct {
251 pub const DUPFD = 0;
252 pub const GETFD = 1;
253 pub const SETFD = 2;
254 pub const GETFL = 3;
255 pub const SETFL = 4;
256
257 pub const SETOWN = 8;
258 pub const GETOWN = 9;
259 pub const SETSIG = 10;
260 pub const GETSIG = 11;
261
262 pub const GETLK = 5;
263 pub const SETLK = 6;
264 pub const SETLKW = 7;
265
266 pub const RDLCK = 0;
267 pub const WRLCK = 1;
268 pub const UNLCK = 2;
269
270 pub const SETOWN_EX = 15;
271 pub const GETOWN_EX = 16;
272
273 pub const GETOWNER_UIDS = 17;
274};
275
276238pub const VDSO = struct {
277239 pub const CGT_SYM = "__kernel_clock_gettime";
278240 pub const CGT_VER = "LINUX_2.6.15";
279241};
280242
281pub const Flock = extern struct {
282 type: i16,
283 whence: i16,
284 start: off_t,
285 len: off_t,
286 pid: pid_t,
287 __unused: [4]u8,
288};
289
290243pub const blksize_t = i64;
291244pub const nlink_t = u64;
292245pub const time_t = i64;
......@@ -302,38 +255,26 @@ pub const Stat = extern struct {
302255 ino: ino_t,
303256 nlink: nlink_t,
304257 mode: mode_t,
305 uid: uid_t,
306 gid: gid_t,
258 uid: std.os.linux.uid_t,
259 gid: std.os.linux.gid_t,
307260 rdev: dev_t,
308261 size: off_t,
309262 blksize: blksize_t,
310263 blocks: blkcnt_t,
311 atim: timespec,
312 mtim: timespec,
313 ctim: timespec,
264 atim: std.os.linux.timespec,
265 mtim: std.os.linux.timespec,
266 ctim: std.os.linux.timespec,
314267 __unused: [3]u64,
315268
316 pub fn atime(self: @This()) timespec {
269 pub fn atime(self: @This()) std.os.linux.timespec {
317270 return self.atim;
318271 }
319272
320 pub fn mtime(self: @This()) timespec {
273 pub fn mtime(self: @This()) std.os.linux.timespec {
321274 return self.mtim;
322275 }
323276
324 pub fn ctime(self: @This()) timespec {
277 pub fn ctime(self: @This()) std.os.linux.timespec {
325278 return self.ctim;
326279 }
327280};
328
329pub const timeval = extern struct {
330 sec: isize,
331 usec: isize,
332};
333
334pub const timezone = extern struct {
335 minuteswest: i32,
336 dsttime: i32,
337};
338
339pub const Elf_Symndx = u32;
lib/std/os/linux/riscv32.zig+31-82
......@@ -1,45 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const iovec = std.posix.iovec;
4const iovec_const = std.posix.iovec_const;
5const linux = std.os.linux;
6const SYS = linux.SYS;
7const uid_t = std.os.linux.uid_t;
8const gid_t = std.os.linux.gid_t;
9const pid_t = std.os.linux.pid_t;
10const stack_t = linux.stack_t;
11const sigset_t = linux.sigset_t;
12const sockaddr = linux.sockaddr;
13const socklen_t = linux.socklen_t;
14const timespec = std.os.linux.timespec;
3const SYS = std.os.linux.SYS;
154
16pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
176 return asm volatile ("ecall"
18 : [ret] "={x10}" (-> usize),
7 : [ret] "={x10}" (-> u32),
198 : [number] "{x17}" (@intFromEnum(number)),
209 : .{ .memory = true });
2110}
2211
23pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u32) u32 {
2413 return asm volatile ("ecall"
25 : [ret] "={x10}" (-> usize),
14 : [ret] "={x10}" (-> u32),
2615 : [number] "{x17}" (@intFromEnum(number)),
2716 [arg1] "{x10}" (arg1),
2817 : .{ .memory = true });
2918}
3019
31pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
3221 return asm volatile ("ecall"
33 : [ret] "={x10}" (-> usize),
22 : [ret] "={x10}" (-> u32),
3423 : [number] "{x17}" (@intFromEnum(number)),
3524 [arg1] "{x10}" (arg1),
3625 [arg2] "{x11}" (arg2),
3726 : .{ .memory = true });
3827}
3928
40pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
4130 return asm volatile ("ecall"
42 : [ret] "={x10}" (-> usize),
31 : [ret] "={x10}" (-> u32),
4332 : [number] "{x17}" (@intFromEnum(number)),
4433 [arg1] "{x10}" (arg1),
4534 [arg2] "{x11}" (arg2),
......@@ -47,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4736 : .{ .memory = true });
4837}
4938
50pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
5140 return asm volatile ("ecall"
52 : [ret] "={x10}" (-> usize),
41 : [ret] "={x10}" (-> u32),
5342 : [number] "{x17}" (@intFromEnum(number)),
5443 [arg1] "{x10}" (arg1),
5544 [arg2] "{x11}" (arg2),
......@@ -58,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5847 : .{ .memory = true });
5948}
6049
61pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
6251 return asm volatile ("ecall"
63 : [ret] "={x10}" (-> usize),
52 : [ret] "={x10}" (-> u32),
6453 : [number] "{x17}" (@intFromEnum(number)),
6554 [arg1] "{x10}" (arg1),
6655 [arg2] "{x11}" (arg2),
......@@ -72,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7261
7362pub fn syscall6(
7463 number: SYS,
75 arg1: usize,
76 arg2: usize,
77 arg3: usize,
78 arg4: usize,
79 arg5: usize,
80 arg6: usize,
81) usize {
64 arg1: u32,
65 arg2: u32,
66 arg3: u32,
67 arg4: u32,
68 arg5: u32,
69 arg6: u32,
70) u32 {
8271 return asm volatile ("ecall"
83 : [ret] "={x10}" (-> usize),
72 : [ret] "={x10}" (-> u32),
8473 : [number] "{x17}" (@intFromEnum(number)),
8574 [arg1] "{x10}" (arg1),
8675 [arg2] "{x11}" (arg2),
......@@ -91,7 +80,7 @@ pub fn syscall6(
9180 : .{ .memory = true });
9281}
9382
94pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u32 {
9584 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9685 // a0, a1, a2, a3, a4, a5, a6
9786 //
......@@ -135,30 +124,6 @@ pub fn clone() callconv(.naked) usize {
135124 );
136125}
137126
138pub const F = struct {
139 pub const DUPFD = 0;
140 pub const GETFD = 1;
141 pub const SETFD = 2;
142 pub const GETFL = 3;
143 pub const SETFL = 4;
144 pub const GETLK = 5;
145 pub const SETLK = 6;
146 pub const SETLKW = 7;
147 pub const SETOWN = 8;
148 pub const GETOWN = 9;
149 pub const SETSIG = 10;
150 pub const GETSIG = 11;
151
152 pub const RDLCK = 0;
153 pub const WRLCK = 1;
154 pub const UNLCK = 2;
155
156 pub const SETOWN_EX = 15;
157 pub const GETOWN_EX = 16;
158
159 pub const GETOWNER_UIDS = 17;
160};
161
162127pub const blksize_t = i32;
163128pub const nlink_t = u32;
164129pub const time_t = i64;
......@@ -168,54 +133,38 @@ pub const ino_t = u64;
168133pub const dev_t = u64;
169134pub const blkcnt_t = i64;
170135
171pub const timeval = extern struct {
172 sec: time_t,
173 usec: i64,
174};
175
176pub const Flock = extern struct {
177 type: i16,
178 whence: i16,
179 start: off_t,
180 len: off_t,
181 pid: pid_t,
182 __unused: [4]u8,
183};
184
185136// The `stat` definition used by the Linux kernel.
186137pub const Stat = extern struct {
187138 dev: dev_t,
188139 ino: ino_t,
189140 mode: mode_t,
190141 nlink: nlink_t,
191 uid: uid_t,
192 gid: gid_t,
142 uid: std.os.linux.uid_t,
143 gid: std.os.linux.gid_t,
193144 rdev: dev_t,
194 __pad: usize,
145 __pad: u32,
195146 size: off_t,
196147 blksize: blksize_t,
197148 __pad2: i32,
198149 blocks: blkcnt_t,
199 atim: timespec,
200 mtim: timespec,
201 ctim: timespec,
150 atim: std.os.linux.timespec,
151 mtim: std.os.linux.timespec,
152 ctim: std.os.linux.timespec,
202153 __unused: [2]u32,
203154
204 pub fn atime(self: @This()) timespec {
155 pub fn atime(self: @This()) std.os.linux.timespec {
205156 return self.atim;
206157 }
207158
208 pub fn mtime(self: @This()) timespec {
159 pub fn mtime(self: @This()) std.os.linux.timespec {
209160 return self.mtim;
210161 }
211162
212 pub fn ctime(self: @This()) timespec {
163 pub fn ctime(self: @This()) std.os.linux.timespec {
213164 return self.ctim;
214165 }
215166};
216167
217pub const Elf_Symndx = u32;
218
219168pub const VDSO = struct {
220169 pub const CGT_SYM = "__vdso_clock_gettime";
221170 pub const CGT_VER = "LINUX_4.15";
lib/std/os/linux/riscv64.zig+31-82
......@@ -1,45 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const iovec = std.posix.iovec;
4const iovec_const = std.posix.iovec_const;
5const linux = std.os.linux;
6const SYS = linux.SYS;
7const uid_t = std.os.linux.uid_t;
8const gid_t = std.os.linux.gid_t;
9const pid_t = std.os.linux.pid_t;
10const stack_t = linux.stack_t;
11const sigset_t = linux.sigset_t;
12const sockaddr = linux.sockaddr;
13const socklen_t = linux.socklen_t;
14const timespec = std.os.linux.timespec;
3const SYS = std.os.linux.SYS;
154
16pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u64 {
176 return asm volatile ("ecall"
18 : [ret] "={x10}" (-> usize),
7 : [ret] "={x10}" (-> u64),
198 : [number] "{x17}" (@intFromEnum(number)),
209 : .{ .memory = true });
2110}
2211
23pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u64) u64 {
2413 return asm volatile ("ecall"
25 : [ret] "={x10}" (-> usize),
14 : [ret] "={x10}" (-> u64),
2615 : [number] "{x17}" (@intFromEnum(number)),
2716 [arg1] "{x10}" (arg1),
2817 : .{ .memory = true });
2918}
3019
31pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
3221 return asm volatile ("ecall"
33 : [ret] "={x10}" (-> usize),
22 : [ret] "={x10}" (-> u64),
3423 : [number] "{x17}" (@intFromEnum(number)),
3524 [arg1] "{x10}" (arg1),
3625 [arg2] "{x11}" (arg2),
3726 : .{ .memory = true });
3827}
3928
40pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
4130 return asm volatile ("ecall"
42 : [ret] "={x10}" (-> usize),
31 : [ret] "={x10}" (-> u64),
4332 : [number] "{x17}" (@intFromEnum(number)),
4433 [arg1] "{x10}" (arg1),
4534 [arg2] "{x11}" (arg2),
......@@ -47,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4736 : .{ .memory = true });
4837}
4938
50pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
5140 return asm volatile ("ecall"
52 : [ret] "={x10}" (-> usize),
41 : [ret] "={x10}" (-> u64),
5342 : [number] "{x17}" (@intFromEnum(number)),
5443 [arg1] "{x10}" (arg1),
5544 [arg2] "{x11}" (arg2),
......@@ -58,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5847 : .{ .memory = true });
5948}
6049
61pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
6251 return asm volatile ("ecall"
63 : [ret] "={x10}" (-> usize),
52 : [ret] "={x10}" (-> u64),
6453 : [number] "{x17}" (@intFromEnum(number)),
6554 [arg1] "{x10}" (arg1),
6655 [arg2] "{x11}" (arg2),
......@@ -72,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7261
7362pub fn syscall6(
7463 number: SYS,
75 arg1: usize,
76 arg2: usize,
77 arg3: usize,
78 arg4: usize,
79 arg5: usize,
80 arg6: usize,
81) usize {
64 arg1: u64,
65 arg2: u64,
66 arg3: u64,
67 arg4: u64,
68 arg5: u64,
69 arg6: u64,
70) u64 {
8271 return asm volatile ("ecall"
83 : [ret] "={x10}" (-> usize),
72 : [ret] "={x10}" (-> u64),
8473 : [number] "{x17}" (@intFromEnum(number)),
8574 [arg1] "{x10}" (arg1),
8675 [arg2] "{x11}" (arg2),
......@@ -91,7 +80,7 @@ pub fn syscall6(
9180 : .{ .memory = true });
9281}
9382
94pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u64 {
9584 // __clone(func, stack, flags, arg, ptid, tls, ctid)
9685 // a0, a1, a2, a3, a4, a5, a6
9786 //
......@@ -135,30 +124,6 @@ pub fn clone() callconv(.naked) usize {
135124 );
136125}
137126
138pub const F = struct {
139 pub const DUPFD = 0;
140 pub const GETFD = 1;
141 pub const SETFD = 2;
142 pub const GETFL = 3;
143 pub const SETFL = 4;
144 pub const GETLK = 5;
145 pub const SETLK = 6;
146 pub const SETLKW = 7;
147 pub const SETOWN = 8;
148 pub const GETOWN = 9;
149 pub const SETSIG = 10;
150 pub const GETSIG = 11;
151
152 pub const RDLCK = 0;
153 pub const WRLCK = 1;
154 pub const UNLCK = 2;
155
156 pub const SETOWN_EX = 15;
157 pub const GETOWN_EX = 16;
158
159 pub const GETOWNER_UIDS = 17;
160};
161
162127pub const blksize_t = i32;
163128pub const nlink_t = u32;
164129pub const time_t = i64;
......@@ -168,54 +133,38 @@ pub const ino_t = u64;
168133pub const dev_t = u64;
169134pub const blkcnt_t = i64;
170135
171pub const timeval = extern struct {
172 sec: time_t,
173 usec: i64,
174};
175
176pub const Flock = extern struct {
177 type: i16,
178 whence: i16,
179 start: off_t,
180 len: off_t,
181 pid: pid_t,
182 __unused: [4]u8,
183};
184
185136// The `stat` definition used by the Linux kernel.
186137pub const Stat = extern struct {
187138 dev: dev_t,
188139 ino: ino_t,
189140 mode: mode_t,
190141 nlink: nlink_t,
191 uid: uid_t,
192 gid: gid_t,
142 uid: std.os.linux.uid_t,
143 gid: std.os.linux.gid_t,
193144 rdev: dev_t,
194 __pad: usize,
145 __pad: u64,
195146 size: off_t,
196147 blksize: blksize_t,
197148 __pad2: i32,
198149 blocks: blkcnt_t,
199 atim: timespec,
200 mtim: timespec,
201 ctim: timespec,
150 atim: std.os.linux.timespec,
151 mtim: std.os.linux.timespec,
152 ctim: std.os.linux.timespec,
202153 __unused: [2]u32,
203154
204 pub fn atime(self: @This()) timespec {
155 pub fn atime(self: @This()) std.os.linux.timespec {
205156 return self.atim;
206157 }
207158
208 pub fn mtime(self: @This()) timespec {
159 pub fn mtime(self: @This()) std.os.linux.timespec {
209160 return self.mtim;
210161 }
211162
212 pub fn ctime(self: @This()) timespec {
163 pub fn ctime(self: @This()) std.os.linux.timespec {
213164 return self.ctim;
214165 }
215166};
216167
217pub const Elf_Symndx = u32;
218
219168pub const VDSO = struct {
220169 pub const CGT_SYM = "__vdso_clock_gettime";
221170 pub const CGT_VER = "LINUX_4.15";
lib/std/os/linux/s390x.zig+25-71
......@@ -1,45 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const iovec = std.posix.iovec;
4const iovec_const = std.posix.iovec_const;
5const linux = std.os.linux;
6const SYS = linux.SYS;
7const uid_t = std.os.linux.uid_t;
8const gid_t = std.os.linux.gid_t;
9const pid_t = std.os.linux.pid_t;
10const sockaddr = linux.sockaddr;
11const socklen_t = linux.socklen_t;
12const timespec = std.os.linux.timespec;
13const stack_t = std.os.linux.stack_t;
14const sigset_t = std.os.linux.sigset_t;
15
16pub fn syscall0(number: SYS) usize {
3const SYS = std.os.linux.SYS;
4
5pub fn syscall0(number: SYS) u64 {
176 return asm volatile ("svc 0"
18 : [ret] "={r2}" (-> usize),
7 : [ret] "={r2}" (-> u64),
198 : [number] "{r1}" (@intFromEnum(number)),
209 : .{ .memory = true });
2110}
2211
23pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u64) u64 {
2413 return asm volatile ("svc 0"
25 : [ret] "={r2}" (-> usize),
14 : [ret] "={r2}" (-> u64),
2615 : [number] "{r1}" (@intFromEnum(number)),
2716 [arg1] "{r2}" (arg1),
2817 : .{ .memory = true });
2918}
3019
31pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
3221 return asm volatile ("svc 0"
33 : [ret] "={r2}" (-> usize),
22 : [ret] "={r2}" (-> u64),
3423 : [number] "{r1}" (@intFromEnum(number)),
3524 [arg1] "{r2}" (arg1),
3625 [arg2] "{r3}" (arg2),
3726 : .{ .memory = true });
3827}
3928
40pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
4130 return asm volatile ("svc 0"
42 : [ret] "={r2}" (-> usize),
31 : [ret] "={r2}" (-> u64),
4332 : [number] "{r1}" (@intFromEnum(number)),
4433 [arg1] "{r2}" (arg1),
4534 [arg2] "{r3}" (arg2),
......@@ -47,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4736 : .{ .memory = true });
4837}
4938
50pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
5140 return asm volatile ("svc 0"
52 : [ret] "={r2}" (-> usize),
41 : [ret] "={r2}" (-> u64),
5342 : [number] "{r1}" (@intFromEnum(number)),
5443 [arg1] "{r2}" (arg1),
5544 [arg2] "{r3}" (arg2),
......@@ -58,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5847 : .{ .memory = true });
5948}
6049
61pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
6251 return asm volatile ("svc 0"
63 : [ret] "={r2}" (-> usize),
52 : [ret] "={r2}" (-> u64),
6453 : [number] "{r1}" (@intFromEnum(number)),
6554 [arg1] "{r2}" (arg1),
6655 [arg2] "{r3}" (arg2),
......@@ -70,9 +59,9 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7059 : .{ .memory = true });
7160}
7261
73pub fn syscall6(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize, arg6: usize) usize {
62pub fn syscall6(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64, arg6: u64) u64 {
7463 return asm volatile ("svc 0"
75 : [ret] "={r2}" (-> usize),
64 : [ret] "={r2}" (-> u64),
7665 : [number] "{r1}" (@intFromEnum(number)),
7766 [arg1] "{r2}" (arg1),
7867 [arg2] "{r3}" (arg2),
......@@ -83,7 +72,7 @@ pub fn syscall6(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
8372 : .{ .memory = true });
8473}
8574
86pub fn clone() callconv(.naked) usize {
75pub fn clone() callconv(.naked) u64 {
8776 asm volatile (
8877 \\# int clone(
8978 \\# fn, a = r2
......@@ -157,26 +146,6 @@ pub fn restore_rt() callconv(.naked) noreturn {
157146 );
158147}
159148
160pub const F = struct {
161 pub const DUPFD = 0;
162 pub const GETFD = 1;
163 pub const SETFD = 2;
164 pub const GETFL = 3;
165 pub const SETFL = 4;
166 pub const GETLK = 5;
167 pub const SETLK = 6;
168 pub const SETLKW = 7;
169 pub const SETOWN = 8;
170 pub const GETOWN = 9;
171 pub const SETSIG = 10;
172 pub const GETSIG = 11;
173
174 pub const SETOWN_EX = 15;
175 pub const GETOWN_EX = 16;
176
177 pub const GETOWNER_UIDS = 17;
178};
179
180149pub const blksize_t = i64;
181150pub const nlink_t = u64;
182151pub const time_t = i64;
......@@ -186,51 +155,36 @@ pub const ino_t = u64;
186155pub const dev_t = u64;
187156pub const blkcnt_t = i64;
188157
189pub const timeval = extern struct {
190 sec: time_t,
191 usec: i64,
192};
193
194pub const Flock = extern struct {
195 type: i16,
196 whence: i16,
197 start: off_t,
198 len: off_t,
199 pid: pid_t,
200};
201
202158// The `stat` definition used by the Linux kernel.
203159pub const Stat = extern struct {
204160 dev: dev_t,
205161 ino: ino_t,
206162 nlink: nlink_t,
207163 mode: mode_t,
208 uid: uid_t,
209 gid: gid_t,
164 uid: std.os.linux.uid_t,
165 gid: std.os.linux.gid_t,
210166 rdev: dev_t,
211167 size: off_t,
212 atim: timespec,
213 mtim: timespec,
214 ctim: timespec,
168 atim: std.os.linux.timespec,
169 mtim: std.os.linux.timespec,
170 ctim: std.os.linux.timespec,
215171 blksize: blksize_t,
216172 blocks: blkcnt_t,
217173 __unused: [3]c_ulong,
218174
219 pub fn atime(self: @This()) timespec {
175 pub fn atime(self: @This()) std.os.linux.timespec {
220176 return self.atim;
221177 }
222178
223 pub fn mtime(self: @This()) timespec {
179 pub fn mtime(self: @This()) std.os.linux.timespec {
224180 return self.mtim;
225181 }
226182
227 pub fn ctime(self: @This()) timespec {
183 pub fn ctime(self: @This()) std.os.linux.timespec {
228184 return self.ctim;
229185 }
230186};
231187
232pub const Elf_Symndx = u64;
233
234188pub const VDSO = struct {
235189 pub const CGT_SYM = "__kernel_clock_gettime";
236190 pub const CGT_VER = "LINUX_2.6.29";
lib/std/os/linux/sparc64.zig+46-101
......@@ -1,21 +1,8 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const pid_t = linux.pid_t;
5const uid_t = linux.uid_t;
6const clock_t = linux.clock_t;
7const stack_t = linux.stack_t;
8const sigset_t = linux.sigset_t;
3const SYS = std.os.linux.SYS;
94
10const linux = std.os.linux;
11const SYS = linux.SYS;
12const sockaddr = linux.sockaddr;
13const socklen_t = linux.socklen_t;
14const iovec = std.posix.iovec;
15const iovec_const = std.posix.iovec_const;
16const timespec = linux.timespec;
17
18pub fn syscall_pipe(fd: *[2]i32) usize {
5pub fn syscall_pipe(fd: *[2]i32) u64 {
196 return asm volatile (
207 \\ mov %[arg], %%g3
218 \\ t 0x6d
......@@ -29,13 +16,13 @@ pub fn syscall_pipe(fd: *[2]i32) usize {
2916 \\ st %%o1, [%%g3+4]
3017 \\ clr %%o0
3118 \\2:
32 : [ret] "={o0}" (-> usize),
19 : [ret] "={o0}" (-> u64),
3320 : [number] "{g1}" (@intFromEnum(SYS.pipe)),
3421 [arg] "r" (fd),
3522 : .{ .memory = true, .g3 = true });
3623}
3724
38pub fn syscall_fork() usize {
25pub fn syscall_fork() u64 {
3926 // Linux/sparc64 fork() returns two values in %o0 and %o1:
4027 // - On the parent's side, %o0 is the child's PID and %o1 is 0.
4128 // - On the child's side, %o0 is the parent's PID and %o1 is 1.
......@@ -52,58 +39,58 @@ pub fn syscall_fork() usize {
5239 \\ dec %%o1
5340 \\ and %%o1, %%o0, %%o0
5441 \\ 2:
55 : [ret] "={o0}" (-> usize),
42 : [ret] "={o0}" (-> u64),
5643 : [number] "{g1}" (@intFromEnum(SYS.fork)),
5744 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
5845}
5946
60pub fn syscall0(number: SYS) usize {
47pub fn syscall0(number: SYS) u64 {
6148 return asm volatile (
6249 \\ t 0x6d
6350 \\ bcc,pt %%xcc, 1f
6451 \\ nop
6552 \\ neg %%o0
6653 \\ 1:
67 : [ret] "={o0}" (-> usize),
54 : [ret] "={o0}" (-> u64),
6855 : [number] "{g1}" (@intFromEnum(number)),
6956 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
7057}
7158
72pub fn syscall1(number: SYS, arg1: usize) usize {
59pub fn syscall1(number: SYS, arg1: u64) u64 {
7360 return asm volatile (
7461 \\ t 0x6d
7562 \\ bcc,pt %%xcc, 1f
7663 \\ nop
7764 \\ neg %%o0
7865 \\ 1:
79 : [ret] "={o0}" (-> usize),
66 : [ret] "={o0}" (-> u64),
8067 : [number] "{g1}" (@intFromEnum(number)),
8168 [arg1] "{o0}" (arg1),
8269 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
8370}
8471
85pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
72pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
8673 return asm volatile (
8774 \\ t 0x6d
8875 \\ bcc,pt %%xcc, 1f
8976 \\ nop
9077 \\ neg %%o0
9178 \\ 1:
92 : [ret] "={o0}" (-> usize),
79 : [ret] "={o0}" (-> u64),
9380 : [number] "{g1}" (@intFromEnum(number)),
9481 [arg1] "{o0}" (arg1),
9582 [arg2] "{o1}" (arg2),
9683 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
9784}
9885
99pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
86pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
10087 return asm volatile (
10188 \\ t 0x6d
10289 \\ bcc,pt %%xcc, 1f
10390 \\ nop
10491 \\ neg %%o0
10592 \\ 1:
106 : [ret] "={o0}" (-> usize),
93 : [ret] "={o0}" (-> u64),
10794 : [number] "{g1}" (@intFromEnum(number)),
10895 [arg1] "{o0}" (arg1),
10996 [arg2] "{o1}" (arg2),
......@@ -111,14 +98,14 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
11198 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
11299}
113100
114pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
101pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
115102 return asm volatile (
116103 \\ t 0x6d
117104 \\ bcc,pt %%xcc, 1f
118105 \\ nop
119106 \\ neg %%o0
120107 \\ 1:
121 : [ret] "={o0}" (-> usize),
108 : [ret] "={o0}" (-> u64),
122109 : [number] "{g1}" (@intFromEnum(number)),
123110 [arg1] "{o0}" (arg1),
124111 [arg2] "{o1}" (arg2),
......@@ -127,14 +114,14 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
127114 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
128115}
129116
130pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
117pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
131118 return asm volatile (
132119 \\ t 0x6d
133120 \\ bcc,pt %%xcc, 1f
134121 \\ nop
135122 \\ neg %%o0
136123 \\ 1:
137 : [ret] "={o0}" (-> usize),
124 : [ret] "={o0}" (-> u64),
138125 : [number] "{g1}" (@intFromEnum(number)),
139126 [arg1] "{o0}" (arg1),
140127 [arg2] "{o1}" (arg2),
......@@ -146,20 +133,20 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
146133
147134pub fn syscall6(
148135 number: SYS,
149 arg1: usize,
150 arg2: usize,
151 arg3: usize,
152 arg4: usize,
153 arg5: usize,
154 arg6: usize,
155) usize {
136 arg1: u64,
137 arg2: u64,
138 arg3: u64,
139 arg4: u64,
140 arg5: u64,
141 arg6: u64,
142) u64 {
156143 return asm volatile (
157144 \\ t 0x6d
158145 \\ bcc,pt %%xcc, 1f
159146 \\ nop
160147 \\ neg %%o0
161148 \\ 1:
162 : [ret] "={o0}" (-> usize),
149 : [ret] "={o0}" (-> u64),
163150 : [number] "{g1}" (@intFromEnum(number)),
164151 [arg1] "{o0}" (arg1),
165152 [arg2] "{o1}" (arg2),
......@@ -170,7 +157,7 @@ pub fn syscall6(
170157 : .{ .memory = true, .icc = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
171158}
172159
173pub fn clone() callconv(.naked) usize {
160pub fn clone() callconv(.naked) u64 {
174161 // __clone(func, stack, flags, arg, ptid, tls, ctid)
175162 // i0, i1, i2, i3, i4, i5, sp
176163 //
......@@ -236,93 +223,51 @@ pub fn restore_rt() callconv(.c) void {
236223 : .{ .memory = true, .icc = true, .o0 = true, .o1 = true, .o2 = true, .o3 = true, .o4 = true, .o5 = true, .o7 = true });
237224}
238225
239pub const F = struct {
240 pub const DUPFD = 0;
241 pub const GETFD = 1;
242 pub const SETFD = 2;
243 pub const GETFL = 3;
244 pub const SETFL = 4;
245
246 pub const SETOWN = 5;
247 pub const GETOWN = 6;
248 pub const GETLK = 7;
249 pub const SETLK = 8;
250 pub const SETLKW = 9;
251
252 pub const RDLCK = 1;
253 pub const WRLCK = 2;
254 pub const UNLCK = 3;
255
256 pub const SETOWN_EX = 15;
257 pub const GETOWN_EX = 16;
258
259 pub const GETOWNER_UIDS = 17;
260};
261
262226pub const VDSO = struct {
263227 pub const CGT_SYM = "__vdso_clock_gettime";
264228 pub const CGT_VER = "LINUX_2.6";
265229};
266230
267pub const Flock = extern struct {
268 type: i16,
269 whence: i16,
270 start: off_t,
271 len: off_t,
272 pid: pid_t,
273};
274
275231pub const off_t = i64;
276232pub const ino_t = u64;
277pub const time_t = isize;
233pub const time_t = i64;
278234pub const mode_t = u32;
279pub const dev_t = usize;
235pub const dev_t = u64;
280236pub const nlink_t = u32;
281pub const blksize_t = isize;
282pub const blkcnt_t = isize;
237pub const blksize_t = i64;
238pub const blkcnt_t = i64;
283239
284240// The `stat64` definition used by the kernel.
285241pub const Stat = extern struct {
286 dev: u64,
287 ino: u64,
288 nlink: u64,
242 dev: dev_t,
243 ino: ino_t,
244 nlink: nlink_t,
245 _pad: i32,
289246
290 mode: u32,
291 uid: u32,
292 gid: u32,
247 mode: mode_t,
248 uid: std.os.linux.uid_t,
249 gid: std.os.linux.gid_t,
293250 __pad0: u32,
294251
295 rdev: u64,
252 rdev: dev_t,
296253 size: i64,
297 blksize: i64,
298 blocks: i64,
254 blksize: blksize_t,
255 blocks: blkcnt_t,
299256
300 atim: timespec,
301 mtim: timespec,
302 ctim: timespec,
257 atim: std.os.linux.timespec,
258 mtim: std.os.linux.timespec,
259 ctim: std.os.linux.timespec,
303260 __unused: [3]u64,
304261
305 pub fn atime(self: @This()) timespec {
262 pub fn atime(self: @This()) std.os.linux.timespec {
306263 return self.atim;
307264 }
308265
309 pub fn mtime(self: @This()) timespec {
266 pub fn mtime(self: @This()) std.os.linux.timespec {
310267 return self.mtim;
311268 }
312269
313 pub fn ctime(self: @This()) timespec {
270 pub fn ctime(self: @This()) std.os.linux.timespec {
314271 return self.ctim;
315272 }
316273};
317
318pub const timeval = extern struct {
319 sec: isize,
320 usec: i32,
321};
322
323pub const timezone = extern struct {
324 minuteswest: i32,
325 dsttime: i32,
326};
327
328pub const Elf_Symndx = u32;
lib/std/os/linux/thumb.zig+28-43
......@@ -4,64 +4,55 @@
44//! Save and restore r7 around the syscall without touching the stack pointer not
55//! to break the frame chain.
66const std = @import("../../std.zig");
7const linux = std.os.linux;
8const SYS = linux.SYS;
7const SYS = std.os.linux.SYS;
98
10pub fn syscall0(number: SYS) usize {
11 @setRuntimeSafety(false);
12
13 var buf: [2]usize = .{ @intFromEnum(number), undefined };
9pub fn syscall0(number: SYS) u32 {
10 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
1411 return asm volatile (
1512 \\ str r7, [%[tmp], #4]
1613 \\ ldr r7, [%[tmp]]
1714 \\ svc #0
1815 \\ ldr r7, [%[tmp], #4]
19 : [ret] "={r0}" (-> usize),
16 : [ret] "={r0}" (-> u32),
2017 : [tmp] "{r1}" (&buf),
2118 : .{ .memory = true });
2219}
2320
24pub fn syscall1(number: SYS, arg1: usize) usize {
25 @setRuntimeSafety(false);
26
27 var buf: [2]usize = .{ @intFromEnum(number), undefined };
21pub fn syscall1(number: SYS, arg1: u32) u32 {
22 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
2823 return asm volatile (
2924 \\ str r7, [%[tmp], #4]
3025 \\ ldr r7, [%[tmp]]
3126 \\ svc #0
3227 \\ ldr r7, [%[tmp], #4]
33 : [ret] "={r0}" (-> usize),
28 : [ret] "={r0}" (-> u32),
3429 : [tmp] "{r1}" (&buf),
3530 [arg1] "{r0}" (arg1),
3631 : .{ .memory = true });
3732}
3833
39pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
40 @setRuntimeSafety(false);
41
42 var buf: [2]usize = .{ @intFromEnum(number), undefined };
34pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
35 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
4336 return asm volatile (
4437 \\ str r7, [%[tmp], #4]
4538 \\ ldr r7, [%[tmp]]
4639 \\ svc #0
4740 \\ ldr r7, [%[tmp], #4]
48 : [ret] "={r0}" (-> usize),
41 : [ret] "={r0}" (-> u32),
4942 : [tmp] "{r2}" (&buf),
5043 [arg1] "{r0}" (arg1),
5144 [arg2] "{r1}" (arg2),
5245 : .{ .memory = true });
5346}
5447
55pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
56 @setRuntimeSafety(false);
57
58 var buf: [2]usize = .{ @intFromEnum(number), undefined };
48pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
49 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
5950 return asm volatile (
6051 \\ str r7, [%[tmp], #4]
6152 \\ ldr r7, [%[tmp]]
6253 \\ svc #0
6354 \\ ldr r7, [%[tmp], #4]
64 : [ret] "={r0}" (-> usize),
55 : [ret] "={r0}" (-> u32),
6556 : [tmp] "{r3}" (&buf),
6657 [arg1] "{r0}" (arg1),
6758 [arg2] "{r1}" (arg2),
......@@ -69,16 +60,14 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
6960 : .{ .memory = true });
7061}
7162
72pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
73 @setRuntimeSafety(false);
74
75 var buf: [2]usize = .{ @intFromEnum(number), undefined };
63pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
64 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
7665 return asm volatile (
7766 \\ str r7, [%[tmp], #4]
7867 \\ ldr r7, [%[tmp]]
7968 \\ svc #0
8069 \\ ldr r7, [%[tmp], #4]
81 : [ret] "={r0}" (-> usize),
70 : [ret] "={r0}" (-> u32),
8271 : [tmp] "{r4}" (&buf),
8372 [arg1] "{r0}" (arg1),
8473 [arg2] "{r1}" (arg2),
......@@ -87,16 +76,14 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
8776 : .{ .memory = true });
8877}
8978
90pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
91 @setRuntimeSafety(false);
92
93 var buf: [2]usize = .{ @intFromEnum(number), undefined };
79pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
80 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
9481 return asm volatile (
9582 \\ str r7, [%[tmp], #4]
9683 \\ ldr r7, [%[tmp]]
9784 \\ svc #0
9885 \\ ldr r7, [%[tmp], #4]
99 : [ret] "={r0}" (-> usize),
86 : [ret] "={r0}" (-> u32),
10087 : [tmp] "{r5}" (&buf),
10188 [arg1] "{r0}" (arg1),
10289 [arg2] "{r1}" (arg2),
......@@ -108,22 +95,20 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
10895
10996pub fn syscall6(
11097 number: SYS,
111 arg1: usize,
112 arg2: usize,
113 arg3: usize,
114 arg4: usize,
115 arg5: usize,
116 arg6: usize,
117) usize {
118 @setRuntimeSafety(false);
119
120 var buf: [2]usize = .{ @intFromEnum(number), undefined };
98 arg1: u32,
99 arg2: u32,
100 arg3: u32,
101 arg4: u32,
102 arg5: u32,
103 arg6: u32,
104) u32 {
105 var buf: [2]u32 = .{ @intFromEnum(number), undefined };
121106 return asm volatile (
122107 \\ str r7, [%[tmp], #4]
123108 \\ ldr r7, [%[tmp]]
124109 \\ svc #0
125110 \\ ldr r7, [%[tmp], #4]
126 : [ret] "={r0}" (-> usize),
111 : [ret] "={r0}" (-> u32),
127112 : [tmp] "{r6}" (&buf),
128113 [arg1] "{r0}" (arg1),
129114 [arg2] "{r1}" (arg2),
lib/std/os/linux/tls.zig+1-2
......@@ -16,7 +16,6 @@ const math = std.math;
1616const assert = std.debug.assert;
1717const native_arch = @import("builtin").cpu.arch;
1818const linux = std.os.linux;
19const posix = std.posix;
2019const page_size_min = std.heap.page_size_min;
2120
2221/// Represents an ELF TLS variant.
......@@ -523,7 +522,7 @@ pub fn initStatic(phdrs: []elf.Phdr) void {
523522}
524523
525524inline fn mmap_tls(length: usize) usize {
526 const prot = posix.PROT.READ | posix.PROT.WRITE;
525 const prot = linux.PROT.READ | linux.PROT.WRITE;
527526 const flags: linux.MAP = .{ .TYPE = .PRIVATE, .ANONYMOUS = true };
528527
529528 if (@hasField(linux.SYS, "mmap2")) {
lib/std/os/linux/x32.zig created+192
......@@ -0,0 +1,192 @@
1// TODO: A lot of this file is very likely wrong.
2
3const builtin = @import("builtin");
4const std = @import("../../std.zig");
5const SYS = std.os.linux.SYS;
6
7pub fn syscall0(number: SYS) u32 {
8 return asm volatile ("syscall"
9 : [ret] "={rax}" (-> u32),
10 : [number] "{rax}" (@intFromEnum(number)),
11 : .{ .rcx = true, .r11 = true, .memory = true });
12}
13
14pub fn syscall1(number: SYS, arg1: u32) u32 {
15 return asm volatile ("syscall"
16 : [ret] "={rax}" (-> u32),
17 : [number] "{rax}" (@intFromEnum(number)),
18 [arg1] "{rdi}" (arg1),
19 : .{ .rcx = true, .r11 = true, .memory = true });
20}
21
22pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
23 return asm volatile ("syscall"
24 : [ret] "={rax}" (-> u32),
25 : [number] "{rax}" (@intFromEnum(number)),
26 [arg1] "{rdi}" (arg1),
27 [arg2] "{rsi}" (arg2),
28 : .{ .rcx = true, .r11 = true, .memory = true });
29}
30
31pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
32 return asm volatile ("syscall"
33 : [ret] "={rax}" (-> u32),
34 : [number] "{rax}" (@intFromEnum(number)),
35 [arg1] "{rdi}" (arg1),
36 [arg2] "{rsi}" (arg2),
37 [arg3] "{rdx}" (arg3),
38 : .{ .rcx = true, .r11 = true, .memory = true });
39}
40
41pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
42 return asm volatile ("syscall"
43 : [ret] "={rax}" (-> u32),
44 : [number] "{rax}" (@intFromEnum(number)),
45 [arg1] "{rdi}" (arg1),
46 [arg2] "{rsi}" (arg2),
47 [arg3] "{rdx}" (arg3),
48 [arg4] "{r10}" (arg4),
49 : .{ .rcx = true, .r11 = true, .memory = true });
50}
51
52pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
53 return asm volatile ("syscall"
54 : [ret] "={rax}" (-> u32),
55 : [number] "{rax}" (@intFromEnum(number)),
56 [arg1] "{rdi}" (arg1),
57 [arg2] "{rsi}" (arg2),
58 [arg3] "{rdx}" (arg3),
59 [arg4] "{r10}" (arg4),
60 [arg5] "{r8}" (arg5),
61 : .{ .rcx = true, .r11 = true, .memory = true });
62}
63
64pub fn syscall6(
65 number: SYS,
66 arg1: u32,
67 arg2: u32,
68 arg3: u32,
69 arg4: u32,
70 arg5: u32,
71 arg6: u32,
72) u32 {
73 return asm volatile ("syscall"
74 : [ret] "={rax}" (-> u32),
75 : [number] "{rax}" (@intFromEnum(number)),
76 [arg1] "{rdi}" (arg1),
77 [arg2] "{rsi}" (arg2),
78 [arg3] "{rdx}" (arg3),
79 [arg4] "{r10}" (arg4),
80 [arg5] "{r8}" (arg5),
81 [arg6] "{r9}" (arg6),
82 : .{ .rcx = true, .r11 = true, .memory = true });
83}
84
85pub fn clone() callconv(.naked) u32 {
86 asm volatile (
87 \\ movl $56,%%eax // SYS_clone
88 \\ movq %%rdi,%%r11
89 \\ movq %%rdx,%%rdi
90 \\ movq %%r8,%%rdx
91 \\ movq %%r9,%%r8
92 \\ movq 8(%%rsp),%%r10
93 \\ movq %%r11,%%r9
94 \\ andq $-16,%%rsi
95 \\ subq $8,%%rsi
96 \\ movq %%rcx,(%%rsi)
97 \\ syscall
98 \\ testq %%rax,%%rax
99 \\ jz 1f
100 \\ retq
101 \\
102 \\1:
103 );
104 if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile (
105 \\ .cfi_undefined %%rip
106 );
107 asm volatile (
108 \\ xorl %%ebp,%%ebp
109 \\
110 \\ popq %%rdi
111 \\ callq *%%r9
112 \\ movl %%eax,%%edi
113 \\ movl $60,%%eax // SYS_exit
114 \\ syscall
115 \\
116 );
117}
118
119pub const restore = restore_rt;
120
121pub fn restore_rt() callconv(.naked) noreturn {
122 switch (builtin.zig_backend) {
123 .stage2_c => asm volatile (
124 \\ movl %[number], %%eax
125 \\ syscall
126 :
127 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
128 ),
129 else => asm volatile (
130 \\ syscall
131 :
132 : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
133 ),
134 }
135}
136
137pub const mode_t = u32;
138pub const time_t = i32;
139pub const nlink_t = u32;
140pub const blksize_t = i32;
141pub const blkcnt_t = i32;
142pub const off_t = i64;
143pub const ino_t = u64;
144pub const dev_t = u64;
145
146pub const VDSO = struct {
147 pub const CGT_SYM = "__vdso_clock_gettime";
148 pub const CGT_VER = "LINUX_2.6";
149
150 pub const GETCPU_SYM = "__vdso_getcpu";
151 pub const GETCPU_VER = "LINUX_2.6";
152};
153
154pub const ARCH = struct {
155 pub const SET_GS = 0x1001;
156 pub const SET_FS = 0x1002;
157 pub const GET_FS = 0x1003;
158 pub const GET_GS = 0x1004;
159};
160
161// The `stat` definition used by the Linux kernel.
162pub const Stat = extern struct {
163 dev: dev_t,
164 ino: ino_t,
165 nlink: nlink_t,
166
167 mode: mode_t,
168 uid: std.os.linux.uid_t,
169 gid: std.os.linux.gid_t,
170 __pad0: u32,
171 rdev: dev_t,
172 size: off_t,
173 blksize: blksize_t,
174 blocks: i64,
175
176 atim: std.os.linux.timespec,
177 mtim: std.os.linux.timespec,
178 ctim: std.os.linux.timespec,
179 __unused: [3]i32,
180
181 pub fn atime(self: @This()) std.os.linux.timespec {
182 return self.atim;
183 }
184
185 pub fn mtime(self: @This()) std.os.linux.timespec {
186 return self.mtim;
187 }
188
189 pub fn ctime(self: @This()) std.os.linux.timespec {
190 return self.ctim;
191 }
192};
lib/std/os/linux/x86.zig+38-94
......@@ -1,46 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const socklen_t = linux.socklen_t;
7const iovec = std.posix.iovec;
8const iovec_const = std.posix.iovec_const;
9const uid_t = linux.uid_t;
10const gid_t = linux.gid_t;
11const pid_t = linux.pid_t;
12const stack_t = linux.stack_t;
13const sigset_t = linux.sigset_t;
14const sockaddr = linux.sockaddr;
15const timespec = linux.timespec;
3const SYS = std.os.linux.SYS;
164
17pub fn syscall0(number: SYS) usize {
5pub fn syscall0(number: SYS) u32 {
186 return asm volatile ("int $0x80"
19 : [ret] "={eax}" (-> usize),
7 : [ret] "={eax}" (-> u32),
208 : [number] "{eax}" (@intFromEnum(number)),
219 : .{ .memory = true });
2210}
2311
24pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u32) u32 {
2513 return asm volatile ("int $0x80"
26 : [ret] "={eax}" (-> usize),
14 : [ret] "={eax}" (-> u32),
2715 : [number] "{eax}" (@intFromEnum(number)),
2816 [arg1] "{ebx}" (arg1),
2917 : .{ .memory = true });
3018}
3119
32pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u32, arg2: u32) u32 {
3321 return asm volatile ("int $0x80"
34 : [ret] "={eax}" (-> usize),
22 : [ret] "={eax}" (-> u32),
3523 : [number] "{eax}" (@intFromEnum(number)),
3624 [arg1] "{ebx}" (arg1),
3725 [arg2] "{ecx}" (arg2),
3826 : .{ .memory = true });
3927}
4028
41pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u32, arg2: u32, arg3: u32) u32 {
4230 return asm volatile ("int $0x80"
43 : [ret] "={eax}" (-> usize),
31 : [ret] "={eax}" (-> u32),
4432 : [number] "{eax}" (@intFromEnum(number)),
4533 [arg1] "{ebx}" (arg1),
4634 [arg2] "{ecx}" (arg2),
......@@ -48,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
4836 : .{ .memory = true });
4937}
5038
51pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32) u32 {
5240 return asm volatile ("int $0x80"
53 : [ret] "={eax}" (-> usize),
41 : [ret] "={eax}" (-> u32),
5442 : [number] "{eax}" (@intFromEnum(number)),
5543 [arg1] "{ebx}" (arg1),
5644 [arg2] "{ecx}" (arg2),
......@@ -59,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
5947 : .{ .memory = true });
6048}
6149
62pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u32, arg2: u32, arg3: u32, arg4: u32, arg5: u32) u32 {
6351 return asm volatile ("int $0x80"
64 : [ret] "={eax}" (-> usize),
52 : [ret] "={eax}" (-> u32),
6553 : [number] "{eax}" (@intFromEnum(number)),
6654 [arg1] "{ebx}" (arg1),
6755 [arg2] "{ecx}" (arg2),
......@@ -73,20 +61,20 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7361
7462pub fn syscall6(
7563 number: SYS,
76 arg1: usize,
77 arg2: usize,
78 arg3: usize,
79 arg4: usize,
80 arg5: usize,
81 arg6: usize,
82) usize {
64 arg1: u32,
65 arg2: u32,
66 arg3: u32,
67 arg4: u32,
68 arg5: u32,
69 arg6: u32,
70) u32 {
8371 // arg6 can't be passed to asm in a register because ebp might be reserved as the frame pointer
8472 // and there are no more GPRs available; so we'll need a memory operand for it. Adding that
8573 // memory operand means that on PIC we might need a reference to the GOT, which in turn needs
8674 // *its* own GPR, so we need to pass another arg in memory too! This is surprisingly hard to get
8775 // right, because we can't touch esp or ebp until we're done with the memory input (as that
8876 // input could be relative to esp or ebp).
89 const args56: [2]usize = .{ arg5, arg6 };
77 const args56: [2]u32 = .{ arg5, arg6 };
9078 return asm volatile (
9179 \\ push %[args56]
9280 \\ push %%ebp
......@@ -99,7 +87,7 @@ pub fn syscall6(
9987 \\ int $0x80
10088 \\ pop %%ebp
10189 \\ pop %%edi
102 : [ret] "={eax}" (-> usize),
90 : [ret] "={eax}" (-> u32),
10391 : [number] "{eax}" (@intFromEnum(number)),
10492 [arg1] "{ebx}" (arg1),
10593 [arg2] "{ecx}" (arg2),
......@@ -109,16 +97,16 @@ pub fn syscall6(
10997 : .{ .memory = true });
11098}
11199
112pub fn socketcall(call: usize, args: [*]const usize) usize {
100pub fn socketcall(call: u32, args: [*]const u32) u32 {
113101 return asm volatile ("int $0x80"
114 : [ret] "={eax}" (-> usize),
102 : [ret] "={eax}" (-> u32),
115103 : [number] "{eax}" (@intFromEnum(SYS.socketcall)),
116104 [arg1] "{ebx}" (call),
117105 [arg2] "{ecx}" (@intFromPtr(args)),
118106 : .{ .memory = true });
119107}
120108
121pub fn clone() callconv(.naked) usize {
109pub fn clone() callconv(.naked) u32 {
122110 // __clone(func, stack, flags, arg, ptid, tls, ctid)
123111 // +8, +12, +16, +20, +24, +28, +32
124112 //
......@@ -169,23 +157,23 @@ pub fn clone() callconv(.naked) usize {
169157}
170158
171159pub fn restore() callconv(.naked) noreturn {
172 switch (@import("builtin").zig_backend) {
160 switch (builtin.zig_backend) {
173161 .stage2_c => asm volatile (
174162 \\ movl %[number], %%eax
175163 \\ int $0x80
176164 :
177165 : [number] "i" (@intFromEnum(SYS.sigreturn)),
178 : .{ .memory = true }),
166 ),
179167 else => asm volatile (
180168 \\ int $0x80
181169 :
182170 : [number] "{eax}" (@intFromEnum(SYS.sigreturn)),
183 : .{ .memory = true }),
171 ),
184172 }
185173}
186174
187175pub fn restore_rt() callconv(.naked) noreturn {
188 switch (@import("builtin").zig_backend) {
176 switch (builtin.zig_backend) {
189177 .stage2_c => asm volatile (
190178 \\ movl %[number], %%eax
191179 \\ int $0x80
......@@ -200,46 +188,14 @@ pub fn restore_rt() callconv(.naked) noreturn {
200188 }
201189}
202190
203pub const F = struct {
204 pub const DUPFD = 0;
205 pub const GETFD = 1;
206 pub const SETFD = 2;
207 pub const GETFL = 3;
208 pub const SETFL = 4;
209 pub const SETOWN = 8;
210 pub const GETOWN = 9;
211 pub const SETSIG = 10;
212 pub const GETSIG = 11;
213 pub const GETLK = 12;
214 pub const SETLK = 13;
215 pub const SETLKW = 14;
216 pub const SETOWN_EX = 15;
217 pub const GETOWN_EX = 16;
218 pub const GETOWNER_UIDS = 17;
219
220 pub const RDLCK = 0;
221 pub const WRLCK = 1;
222 pub const UNLCK = 2;
223};
224
225191pub const VDSO = struct {
226192 pub const CGT_SYM = "__vdso_clock_gettime";
227193 pub const CGT_VER = "LINUX_2.6";
228194};
229195
230pub const ARCH = struct {};
231
232pub const Flock = extern struct {
233 type: i16,
234 whence: i16,
235 start: off_t,
236 len: off_t,
237 pid: pid_t,
238};
239
240196pub const blksize_t = i32;
241197pub const nlink_t = u32;
242pub const time_t = isize;
198pub const time_t = i32;
243199pub const mode_t = u32;
244200pub const off_t = i64;
245201pub const ino_t = u64;
......@@ -253,43 +209,31 @@ pub const Stat = extern struct {
253209 __ino_truncated: u32,
254210 mode: mode_t,
255211 nlink: nlink_t,
256 uid: uid_t,
257 gid: gid_t,
212 uid: std.os.linux.uid_t,
213 gid: std.os.linux.gid_t,
258214 rdev: dev_t,
259215 __rdev_padding: u32,
260216 size: off_t,
261217 blksize: blksize_t,
262218 blocks: blkcnt_t,
263 atim: timespec,
264 mtim: timespec,
265 ctim: timespec,
219 atim: std.os.linux.timespec,
220 mtim: std.os.linux.timespec,
221 ctim: std.os.linux.timespec,
266222 ino: ino_t,
267223
268 pub fn atime(self: @This()) timespec {
224 pub fn atime(self: @This()) std.os.linux.timespec {
269225 return self.atim;
270226 }
271227
272 pub fn mtime(self: @This()) timespec {
228 pub fn mtime(self: @This()) std.os.linux.timespec {
273229 return self.mtim;
274230 }
275231
276 pub fn ctime(self: @This()) timespec {
232 pub fn ctime(self: @This()) std.os.linux.timespec {
277233 return self.ctim;
278234 }
279235};
280236
281pub const timeval = extern struct {
282 sec: i32,
283 usec: i32,
284};
285
286pub const timezone = extern struct {
287 minuteswest: i32,
288 dsttime: i32,
289};
290
291pub const Elf_Symndx = u32;
292
293237pub const user_desc = extern struct {
294238 entry_number: u32,
295239 base_addr: u32,
lib/std/os/linux/x86_64.zig+43-101
......@@ -1,48 +1,34 @@
11const builtin = @import("builtin");
22const std = @import("../../std.zig");
3const maxInt = std.math.maxInt;
4const linux = std.os.linux;
5const SYS = linux.SYS;
6const iovec = std.posix.iovec;
7const iovec_const = std.posix.iovec_const;
8
9const pid_t = linux.pid_t;
10const uid_t = linux.uid_t;
11const gid_t = linux.gid_t;
12const clock_t = linux.clock_t;
13const stack_t = linux.stack_t;
14const sigset_t = linux.sigset_t;
15const sockaddr = linux.sockaddr;
16const socklen_t = linux.socklen_t;
17const timespec = linux.timespec;
18
19pub fn syscall0(number: SYS) usize {
3const SYS = std.os.linux.SYS;
4
5pub fn syscall0(number: SYS) u64 {
206 return asm volatile ("syscall"
21 : [ret] "={rax}" (-> usize),
7 : [ret] "={rax}" (-> u64),
228 : [number] "{rax}" (@intFromEnum(number)),
239 : .{ .rcx = true, .r11 = true, .memory = true });
2410}
2511
26pub fn syscall1(number: SYS, arg1: usize) usize {
12pub fn syscall1(number: SYS, arg1: u64) u64 {
2713 return asm volatile ("syscall"
28 : [ret] "={rax}" (-> usize),
14 : [ret] "={rax}" (-> u64),
2915 : [number] "{rax}" (@intFromEnum(number)),
3016 [arg1] "{rdi}" (arg1),
3117 : .{ .rcx = true, .r11 = true, .memory = true });
3218}
3319
34pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
20pub fn syscall2(number: SYS, arg1: u64, arg2: u64) u64 {
3521 return asm volatile ("syscall"
36 : [ret] "={rax}" (-> usize),
22 : [ret] "={rax}" (-> u64),
3723 : [number] "{rax}" (@intFromEnum(number)),
3824 [arg1] "{rdi}" (arg1),
3925 [arg2] "{rsi}" (arg2),
4026 : .{ .rcx = true, .r11 = true, .memory = true });
4127}
4228
43pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
29pub fn syscall3(number: SYS, arg1: u64, arg2: u64, arg3: u64) u64 {
4430 return asm volatile ("syscall"
45 : [ret] "={rax}" (-> usize),
31 : [ret] "={rax}" (-> u64),
4632 : [number] "{rax}" (@intFromEnum(number)),
4733 [arg1] "{rdi}" (arg1),
4834 [arg2] "{rsi}" (arg2),
......@@ -50,9 +36,9 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
5036 : .{ .rcx = true, .r11 = true, .memory = true });
5137}
5238
53pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
39pub fn syscall4(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64) u64 {
5440 return asm volatile ("syscall"
55 : [ret] "={rax}" (-> usize),
41 : [ret] "={rax}" (-> u64),
5642 : [number] "{rax}" (@intFromEnum(number)),
5743 [arg1] "{rdi}" (arg1),
5844 [arg2] "{rsi}" (arg2),
......@@ -61,9 +47,9 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
6147 : .{ .rcx = true, .r11 = true, .memory = true });
6248}
6349
64pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
50pub fn syscall5(number: SYS, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) u64 {
6551 return asm volatile ("syscall"
66 : [ret] "={rax}" (-> usize),
52 : [ret] "={rax}" (-> u64),
6753 : [number] "{rax}" (@intFromEnum(number)),
6854 [arg1] "{rdi}" (arg1),
6955 [arg2] "{rsi}" (arg2),
......@@ -75,15 +61,15 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
7561
7662pub fn syscall6(
7763 number: SYS,
78 arg1: usize,
79 arg2: usize,
80 arg3: usize,
81 arg4: usize,
82 arg5: usize,
83 arg6: usize,
84) usize {
64 arg1: u64,
65 arg2: u64,
66 arg3: u64,
67 arg4: u64,
68 arg5: u64,
69 arg6: u64,
70) u64 {
8571 return asm volatile ("syscall"
86 : [ret] "={rax}" (-> usize),
72 : [ret] "={rax}" (-> u64),
8773 : [number] "{rax}" (@intFromEnum(number)),
8874 [arg1] "{rdi}" (arg1),
8975 [arg2] "{rsi}" (arg2),
......@@ -94,7 +80,7 @@ pub fn syscall6(
9480 : .{ .rcx = true, .r11 = true, .memory = true });
9581}
9682
97pub fn clone() callconv(.naked) usize {
83pub fn clone() callconv(.naked) u64 {
9884 asm volatile (
9985 \\ movl $56,%%eax // SYS_clone
10086 \\ movq %%rdi,%%r11
......@@ -131,7 +117,7 @@ pub fn clone() callconv(.naked) usize {
131117pub const restore = restore_rt;
132118
133119pub fn restore_rt() callconv(.naked) noreturn {
134 switch (@import("builtin").zig_backend) {
120 switch (builtin.zig_backend) {
135121 .stage2_c => asm volatile (
136122 \\ movl %[number], %%eax
137123 \\ syscall
......@@ -146,34 +132,14 @@ pub fn restore_rt() callconv(.naked) noreturn {
146132 }
147133}
148134
149pub const mode_t = usize;
150pub const time_t = isize;
151pub const nlink_t = usize;
152pub const blksize_t = isize;
153pub const blkcnt_t = isize;
154
155pub const F = struct {
156 pub const DUPFD = 0;
157 pub const GETFD = 1;
158 pub const SETFD = 2;
159 pub const GETFL = 3;
160 pub const SETFL = 4;
161 pub const GETLK = 5;
162 pub const SETLK = 6;
163 pub const SETLKW = 7;
164 pub const SETOWN = 8;
165 pub const GETOWN = 9;
166 pub const SETSIG = 10;
167 pub const GETSIG = 11;
168
169 pub const SETOWN_EX = 15;
170 pub const GETOWN_EX = 16;
171 pub const GETOWNER_UIDS = 17;
172
173 pub const RDLCK = 0;
174 pub const WRLCK = 1;
175 pub const UNLCK = 2;
176};
135pub const mode_t = u64;
136pub const time_t = i64;
137pub const nlink_t = u64;
138pub const blksize_t = i64;
139pub const blkcnt_t = i64;
140pub const off_t = i64;
141pub const ino_t = u64;
142pub const dev_t = u64;
177143
178144pub const VDSO = struct {
179145 pub const CGT_SYM = "__vdso_clock_gettime";
......@@ -190,59 +156,35 @@ pub const ARCH = struct {
190156 pub const GET_GS = 0x1004;
191157};
192158
193pub const Flock = extern struct {
194 type: i16,
195 whence: i16,
196 start: off_t,
197 len: off_t,
198 pid: pid_t,
199};
200
201pub const off_t = i64;
202pub const ino_t = u64;
203pub const dev_t = u64;
204
205159// The `stat` definition used by the Linux kernel.
206160pub const Stat = extern struct {
207161 dev: dev_t,
208162 ino: ino_t,
209 nlink: usize,
163 nlink: u64,
210164
211165 mode: u32,
212 uid: uid_t,
213 gid: gid_t,
166 uid: std.os.linux.uid_t,
167 gid: std.os.linux.gid_t,
214168 __pad0: u32,
215169 rdev: dev_t,
216170 size: off_t,
217 blksize: isize,
171 blksize: i64,
218172 blocks: i64,
219173
220 atim: timespec,
221 mtim: timespec,
222 ctim: timespec,
223 __unused: [3]isize,
174 atim: std.os.linux.timespec,
175 mtim: std.os.linux.timespec,
176 ctim: std.os.linux.timespec,
177 __unused: [3]i64,
224178
225 pub fn atime(self: @This()) timespec {
179 pub fn atime(self: @This()) std.os.linux.timespec {
226180 return self.atim;
227181 }
228182
229 pub fn mtime(self: @This()) timespec {
183 pub fn mtime(self: @This()) std.os.linux.timespec {
230184 return self.mtim;
231185 }
232186
233 pub fn ctime(self: @This()) timespec {
187 pub fn ctime(self: @This()) std.os.linux.timespec {
234188 return self.ctim;
235189 }
236190};
237
238pub const timeval = extern struct {
239 sec: isize,
240 usec: isize,
241};
242
243pub const timezone = extern struct {
244 minuteswest: i32,
245 dsttime: i32,
246};
247
248pub const Elf_Symndx = u32;