commit 44ea11d71f6a713081e3dec11a08ec322dfeb787 (tree)
parent 7ee6dab39fac7aa12fa9fd952bb2bdc28d5eabe8
Author: kj4tmp@gmail.com <kj4tmp@gmail.com>
Date: Tue, 15 Jul 2025 22:30:58 -0700
#24471: add mlock syscalls to std.os.linux
Diffstat:
1 file changed, 38 insertions(+), 0 deletions(-)
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
@@ -1014,6 +1014,44 @@ pub fn munmap(address: [*]const u8, length: usize) usize {
return syscall2(.munmap, @intFromPtr(address), length);
}
+pub fn mlock(address: [*]const u8, length: usize) usize {
+ return syscall2(.mlock, @intFromPtr(address), length);
+}
+
+pub fn munlock(address: [*]const u8, length: usize) usize {
+ return syscall2(.munlock, @intFromPtr(address), length);
+}
+
+pub const MLOCK = packed struct(u32) {
+ ONFAULT: bool = false,
+ _1: u31 = 0,
+};
+
+pub fn mlock2(address: [*]const u8, length: usize, flags: MLOCK) usize {
+ return syscall3(.mlock2, @intFromPtr(address), length, @as(u32, @bitCast(flags)));
+}
+
+pub const MCL = if (native_arch.isSPARC() or native_arch.isPowerPC()) packed struct(u32) {
+ _0: u13 = 0,
+ CURRENT: bool = false,
+ FUTURE: bool = false,
+ ONFAULT: bool = false,
+ _4: u16 = 0,
+} else packed struct(u32) {
+ CURRENT: bool = false,
+ FUTURE: bool = false,
+ ONFAULT: bool = false,
+ _3: u29 = 0,
+};
+
+pub fn mlockall(flags: MCL) usize {
+ return syscall1(.mlockall, @as(u32, @bitCast(flags)));
+}
+
+pub fn munlockall() usize {
+ return syscall0(.munlockall);
+}
+
pub fn poll(fds: [*]pollfd, n: nfds_t, timeout: i32) usize {
if (@hasField(SYS, "poll")) {
return syscall3(.poll, @intFromPtr(fds), n, @as(u32, @bitCast(timeout)));