From 353c59e6d5f32203ade301c609e20c1fa954f73d Mon Sep 17 00:00:00 2001 From: Vincent Rischmann Date: Sun, 10 Oct 2021 13:57:29 +0200 Subject: [PATCH] os/linux: fix rlimit_resource for mips/sparcv9 On MIPS and SPARC the RLIMIT kinds have different numbers than the other architectures. --- lib/std/os/linux.zig | 89 +++++++++++++++++++----------------- lib/std/os/linux/mips.zig | 60 ++++++++++++++++++++++++ lib/std/os/linux/sparc64.zig | 60 ++++++++++++++++++++++++ 3 files changed, 166 insertions(+), 43 deletions(-) diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index d4c9d09120..c62160a4ba 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -4197,65 +4197,68 @@ pub const ifreq = extern struct { }; // doc comments copied from musl -pub const rlimit_resource = enum(c_int) { - /// Per-process CPU limit, in seconds. - CPU, +pub const rlimit_resource = if (native_arch.isMIPS() or native_arch.isSPARC()) + arch_bits.rlimit_resource +else + enum(c_int) { + /// Per-process CPU limit, in seconds. + CPU, - /// Largest file that can be created, in bytes. - FSIZE, + /// Largest file that can be created, in bytes. + FSIZE, - /// Maximum size of data segment, in bytes. - DATA, + /// Maximum size of data segment, in bytes. + DATA, - /// Maximum size of stack segment, in bytes. - STACK, + /// Maximum size of stack segment, in bytes. + STACK, - /// Largest core file that can be created, in bytes. - CORE, + /// Largest core file that can be created, in bytes. + CORE, - /// Largest resident set size, in bytes. - /// This affects swapping; processes that are exceeding their - /// resident set size will be more likely to have physical memory - /// taken from them. - RSS, + /// Largest resident set size, in bytes. + /// This affects swapping; processes that are exceeding their + /// resident set size will be more likely to have physical memory + /// taken from them. + RSS, - /// Number of processes. - NPROC, + /// Number of processes. + NPROC, - /// Number of open files. - NOFILE, + /// Number of open files. + NOFILE, - /// Locked-in-memory address space. - MEMLOCK, + /// Locked-in-memory address space. + MEMLOCK, - /// Address space limit. - AS, + /// Address space limit. + AS, - /// Maximum number of file locks. - LOCKS, + /// Maximum number of file locks. + LOCKS, - /// Maximum number of pending signals. - SIGPENDING, + /// Maximum number of pending signals. + SIGPENDING, - /// Maximum bytes in POSIX message queues. - MSGQUEUE, + /// Maximum bytes in POSIX message queues. + MSGQUEUE, - /// Maximum nice priority allowed to raise to. - /// Nice levels 19 .. -20 correspond to 0 .. 39 - /// values of this resource limit. - NICE, + /// Maximum nice priority allowed to raise to. + /// Nice levels 19 .. -20 correspond to 0 .. 39 + /// values of this resource limit. + NICE, - /// Maximum realtime priority allowed for non-priviledged - /// processes. - RTPRIO, + /// Maximum realtime priority allowed for non-priviledged + /// processes. + RTPRIO, - /// Maximum CPU time in µs that a process scheduled under a real-time - /// scheduling policy may consume without making a blocking system - /// call before being forcibly descheduled. - RTTIME, + /// Maximum CPU time in µs that a process scheduled under a real-time + /// scheduling policy may consume without making a blocking system + /// call before being forcibly descheduled. + RTTIME, - _, -}; + _, + }; pub const rlim_t = u64; diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 27d999987b..49700b6db9 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -769,3 +769,63 @@ pub const timezone = extern struct { }; pub const Elf_Symndx = u32; + +pub const rlimit_resource = enum(c_int) { + /// Per-process CPU limit, in seconds. + CPU, + + /// Largest file that can be created, in bytes. + FSIZE, + + /// Maximum size of data segment, in bytes. + DATA, + + /// Maximum size of stack segment, in bytes. + STACK, + + /// Largest core file that can be created, in bytes. + CORE, + + /// Number of open files. + NOFILE, + + /// Address space limit. + AS, + + /// Largest resident set size, in bytes. + /// This affects swapping; processes that are exceeding their + /// resident set size will be more likely to have physical memory + /// taken from them. + RSS, + + /// Number of processes. + NPROC, + + /// Locked-in-memory address space. + MEMLOCK, + + /// Maximum number of file locks. + LOCKS, + + /// Maximum number of pending signals. + SIGPENDING, + + /// Maximum bytes in POSIX message queues. + MSGQUEUE, + + /// Maximum nice priority allowed to raise to. + /// Nice levels 19 .. -20 correspond to 0 .. 39 + /// values of this resource limit. + NICE, + + /// Maximum realtime priority allowed for non-priviledged + /// processes. + RTPRIO, + + /// Maximum CPU time in µs that a process scheduled under a real-time + /// scheduling policy may consume without making a blocking system + /// call before being forcibly descheduled. + RTTIME, + + _, +}; diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig index 1ed9d98932..1211379567 100644 --- a/lib/std/os/linux/sparc64.zig +++ b/lib/std/os/linux/sparc64.zig @@ -828,3 +828,63 @@ pub const ucontext_t = extern struct { stack: stack_t, sigmask: sigset_t, }; + +pub const rlimit_resource = enum(c_int) { + /// Per-process CPU limit, in seconds. + CPU, + + /// Largest file that can be created, in bytes. + FSIZE, + + /// Maximum size of data segment, in bytes. + DATA, + + /// Maximum size of stack segment, in bytes. + STACK, + + /// Largest core file that can be created, in bytes. + CORE, + + /// Largest resident set size, in bytes. + /// This affects swapping; processes that are exceeding their + /// resident set size will be more likely to have physical memory + /// taken from them. + RSS, + + /// Number of open files. + NOFILE, + + /// Number of processes. + NPROC, + + /// Locked-in-memory address space. + MEMLOCK, + + /// Address space limit. + AS, + + /// Maximum number of file locks. + LOCKS, + + /// Maximum number of pending signals. + SIGPENDING, + + /// Maximum bytes in POSIX message queues. + MSGQUEUE, + + /// Maximum nice priority allowed to raise to. + /// Nice levels 19 .. -20 correspond to 0 .. 39 + /// values of this resource limit. + NICE, + + /// Maximum realtime priority allowed for non-priviledged + /// processes. + RTPRIO, + + /// Maximum CPU time in µs that a process scheduled under a real-time + /// scheduling policy may consume without making a blocking system + /// call before being forcibly descheduled. + RTTIME, + + _, +};