diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 12a8f3906e..a5f49cda1c 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -81,7 +81,6 @@ pub const msghdr_const = arch_bits.msghdr_const; pub const nlink_t = arch_bits.nlink_t; pub const off_t = arch_bits.off_t; pub const time_t = arch_bits.time_t; -pub const timespec = arch_bits.timespec; pub const timeval = arch_bits.timeval; pub const timezone = arch_bits.timezone; pub const ucontext_t = arch_bits.ucontext_t; @@ -4149,11 +4148,17 @@ pub const POSIX_FADV = switch (native_arch) { }, }; -pub const __kernel_timespec = extern struct { +/// The timespec struct used by the kernel. +pub const kernel_timespec = if (@sizeOf(usize) >= 8) timespec else extern struct { tv_sec: i64, tv_nsec: i64, }; +pub const timespec = extern struct { + tv_sec: isize, + tv_nsec: isize, +}; + pub const XDP = struct { pub const SHARED_UMEM = (1 << 0); pub const COPY = (1 << 1); diff --git a/lib/std/os/linux/arm-eabi.zig b/lib/std/os/linux/arm-eabi.zig index 7727e2ff2f..4bb60a0005 100644 --- a/lib/std/os/linux/arm-eabi.zig +++ b/lib/std/os/linux/arm-eabi.zig @@ -10,6 +10,7 @@ const uid_t = linux.uid_t; const gid_t = linux.gid_t; const pid_t = linux.pid_t; const sockaddr = linux.sockaddr; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("svc #0" @@ -703,11 +704,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: i32, - tv_nsec: i32, -}; - pub const timeval = extern struct { tv_sec: i32, tv_usec: i32, diff --git a/lib/std/os/linux/arm64.zig b/lib/std/os/linux/arm64.zig index 7f0c2c12c5..58895843e0 100644 --- a/lib/std/os/linux/arm64.zig +++ b/lib/std/os/linux/arm64.zig @@ -10,6 +10,7 @@ const gid_t = linux.gid_t; const pid_t = linux.pid_t; const stack_t = linux.stack_t; const sigset_t = linux.sigset_t; +const timespec = std.os.linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("svc #0" @@ -558,11 +559,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: time_t, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: isize, tv_usec: isize, diff --git a/lib/std/os/linux/i386.zig b/lib/std/os/linux/i386.zig index eaa803768d..4d1af88e0a 100644 --- a/lib/std/os/linux/i386.zig +++ b/lib/std/os/linux/i386.zig @@ -10,6 +10,7 @@ const pid_t = linux.pid_t; const stack_t = linux.stack_t; const sigset_t = linux.sigset_t; const sockaddr = linux.sockaddr; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("int $0x80" @@ -710,11 +711,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: i32, - tv_nsec: i32, -}; - pub const timeval = extern struct { tv_sec: i32, tv_usec: i32, diff --git a/lib/std/os/linux/io_uring.zig b/lib/std/os/linux/io_uring.zig index 716137f43b..a98ce009a9 100644 --- a/lib/std/os/linux/io_uring.zig +++ b/lib/std/os/linux/io_uring.zig @@ -539,7 +539,7 @@ pub const IO_Uring = struct { pub fn timeout( self: *IO_Uring, user_data: u64, - ts: *const os.linux.timespec, + ts: *const os.linux.kernel_timespec, count: u32, flags: u32, ) !*io_uring_sqe { @@ -979,7 +979,7 @@ pub fn io_uring_prep_close(sqe: *io_uring_sqe, fd: os.fd_t) void { pub fn io_uring_prep_timeout( sqe: *io_uring_sqe, - ts: *const os.linux.timespec, + ts: *const os.linux.kernel_timespec, count: u32, flags: u32, ) void { @@ -1450,7 +1450,7 @@ test "timeout (after a relative time)" { const ms = 10; const margin = 5; - const ts = os.linux.timespec{ .tv_sec = 0, .tv_nsec = ms * 1000000 }; + const ts = os.linux.kernel_timespec{ .tv_sec = 0, .tv_nsec = ms * 1000000 }; const started = std.time.milliTimestamp(); const sqe = try ring.timeout(0x55555555, &ts, 0, 0); @@ -1479,7 +1479,7 @@ test "timeout (after a number of completions)" { }; defer ring.deinit(); - const ts = os.linux.timespec{ .tv_sec = 3, .tv_nsec = 0 }; + const ts = os.linux.kernel_timespec{ .tv_sec = 3, .tv_nsec = 0 }; const count_completions: u64 = 1; const sqe_timeout = try ring.timeout(0x66666666, &ts, count_completions, 0); try testing.expectEqual(linux.IORING_OP.TIMEOUT, sqe_timeout.opcode); @@ -1512,7 +1512,7 @@ test "timeout_remove" { }; defer ring.deinit(); - const ts = os.linux.timespec{ .tv_sec = 3, .tv_nsec = 0 }; + const ts = os.linux.kernel_timespec{ .tv_sec = 3, .tv_nsec = 0 }; const sqe_timeout = try ring.timeout(0x88888888, &ts, 0, 0); try testing.expectEqual(linux.IORING_OP.TIMEOUT, sqe_timeout.opcode); try testing.expectEqual(@as(u64, 0x88888888), sqe_timeout.user_data); diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 2cc5ed9eeb..b3697405f7 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -7,6 +7,7 @@ const iovec_const = linux.iovec_const; const uid_t = linux.uid_t; const gid_t = linux.gid_t; const pid_t = linux.pid_t; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ( @@ -753,11 +754,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: isize, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: isize, tv_usec: isize, diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index e2473055d6..30001c48c6 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -10,6 +10,7 @@ const pid_t = linux.pid_t; const stack_t = linux.stack_t; const sigset_t = linux.sigset_t; const sockaddr = linux.sockaddr; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ( @@ -704,11 +705,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: time_t, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: time_t, tv_usec: isize, diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index 63c4e6a2d9..2903df15ef 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -10,6 +10,7 @@ const pid_t = linux.pid_t; const stack_t = linux.stack_t; const sigset_t = linux.sigset_t; const sockaddr = linux.sockaddr; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ( @@ -679,11 +680,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: time_t, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: isize, tv_usec: isize, diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 424e6bc3de..be78a1bf4e 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -2,6 +2,7 @@ const std = @import("../../std.zig"); const uid_t = std.os.linux.uid_t; const gid_t = std.os.linux.gid_t; const pid_t = std.os.linux.pid_t; +const timespec = std.os.linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("ecall" @@ -468,10 +469,6 @@ pub const off_t = isize; pub const ino_t = usize; pub const dev_t = usize; pub const blkcnt_t = isize; -pub const timespec = extern struct { - tv_sec: time_t, - tv_nsec: isize, -}; pub const timeval = extern struct { tv_sec: time_t, diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index e3e32b659b..3ae490f5e9 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -11,6 +11,7 @@ const sockaddr = linux.sockaddr; const socklen_t = linux.socklen_t; const iovec = linux.iovec; const iovec_const = linux.iovec_const; +const timespec = linux.timespec; pub fn syscall_pipe(fd: *[2]i32) usize { return asm volatile ( @@ -708,11 +709,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: isize, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: isize, tv_usec: isize, diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig index 1a50fb14c6..b6a2d2763f 100644 --- a/lib/std/os/linux/x86_64.zig +++ b/lib/std/os/linux/x86_64.zig @@ -12,6 +12,7 @@ const stack_t = linux.stack_t; const sigset_t = linux.sigset_t; const sockaddr = linux.sockaddr; const socklen_t = linux.socklen_t; +const timespec = linux.timespec; pub fn syscall0(number: SYS) usize { return asm volatile ("syscall" @@ -653,11 +654,6 @@ pub const Stat = extern struct { } }; -pub const timespec = extern struct { - tv_sec: isize, - tv_nsec: isize, -}; - pub const timeval = extern struct { tv_sec: isize, tv_usec: isize,