From 57de61084e1a805838243e5428e774a591197454 Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Thu, 29 Aug 2019 00:55:22 +0200 Subject: [PATCH] Make mmap use SYS_mmap2 if it exists --- std/os/bits/linux/arm-eabi.zig | 2 ++ std/os/linux.zig | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/std/os/bits/linux/arm-eabi.zig b/std/os/bits/linux/arm-eabi.zig index 956e40a2ce..1b45588459 100644 --- a/std/os/bits/linux/arm-eabi.zig +++ b/std/os/bits/linux/arm-eabi.zig @@ -397,6 +397,8 @@ pub const SYS_usr32 = 0x0f0004; pub const SYS_set_tls = 0x0f0005; pub const SYS_get_tls = 0x0f0006; +pub const MMAP2_UNIT = 4096; + pub const O_CREAT = 0o100; pub const O_EXCL = 0o200; pub const O_NOCTTY = 0o400; diff --git a/std/os/linux.zig b/std/os/linux.zig index ba679387dd..7d019001ef 100644 --- a/std/os/linux.zig +++ b/std/os/linux.zig @@ -190,7 +190,11 @@ pub fn umount2(special: [*]const u8, flags: u32) usize { } pub fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: u32, fd: i32, offset: isize) usize { - return syscall6(SYS_mmap, @ptrToInt(address), length, prot, flags, @bitCast(usize, isize(fd)), @bitCast(usize, offset)); + if (@hasDecl(@This(), "SYS_mmap2")) { + return syscall6(SYS_mmap2, @ptrToInt(address), length, prot, flags, @bitCast(usize, isize(fd)), @bitCast(usize, @divTrunc(offset, MMAP2_UNIT))); + } else { + return syscall6(SYS_mmap, @ptrToInt(address), length, prot, flags, @bitCast(usize, isize(fd)), @bitCast(usize, offset)); + } } pub fn mprotect(address: [*]const u8, length: usize, protection: usize) usize {