diff options
Diffstat (limited to 'vendor/rustix/src/backend/libc/mm/syscalls.rs')
-rw-r--r-- | vendor/rustix/src/backend/libc/mm/syscalls.rs | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/vendor/rustix/src/backend/libc/mm/syscalls.rs b/vendor/rustix/src/backend/libc/mm/syscalls.rs index 16636f1b9..4b23a58b7 100644 --- a/vendor/rustix/src/backend/libc/mm/syscalls.rs +++ b/vendor/rustix/src/backend/libc/mm/syscalls.rs @@ -1,19 +1,18 @@ //! libc syscalls supporting `rustix::mm`. -use super::super::c; -#[cfg(any(target_os = "android", target_os = "linux"))] -use super::super::conv::syscall_ret_owned_fd; -use super::super::conv::{borrowed_fd, no_fd, ret}; -use super::super::offset::libc_mmap; #[cfg(not(target_os = "redox"))] use super::types::Advice; #[cfg(any(target_os = "emscripten", target_os = "linux"))] use super::types::MremapFlags; use super::types::{MapFlags, MprotectFlags, MsyncFlags, ProtFlags}; -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] use super::types::{MlockFlags, UserfaultfdFlags}; +use crate::backend::c; +#[cfg(linux_kernel)] +use crate::backend::conv::ret_owned_fd; +use crate::backend::conv::{borrowed_fd, no_fd, ret}; use crate::fd::BorrowedFd; -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] use crate::fd::OwnedFd; use crate::io; @@ -52,7 +51,7 @@ pub(crate) fn madvise(addr: *mut c::c_void, len: usize, advice: Advice) -> io::R } pub(crate) unsafe fn msync(addr: *mut c::c_void, len: usize, flags: MsyncFlags) -> io::Result<()> { - let err = c::msync(addr, len, flags.bits()); + let err = c::msync(addr, len, bitflags_bits!(flags)); // `msync` returns its error status rather than using `errno`. if err == 0 { @@ -74,11 +73,11 @@ pub(crate) unsafe fn mmap( fd: BorrowedFd<'_>, offset: u64, ) -> io::Result<*mut c::c_void> { - let res = libc_mmap( + let res = c::mmap( ptr, len, - prot.bits(), - flags.bits(), + bitflags_bits!(prot), + bitflags_bits!(flags), borrowed_fd(fd), offset as i64, ); @@ -99,11 +98,11 @@ pub(crate) unsafe fn mmap_anonymous( prot: ProtFlags, flags: MapFlags, ) -> io::Result<*mut c::c_void> { - let res = libc_mmap( + let res = c::mmap( ptr, len, - prot.bits(), - flags.bits() | c::MAP_ANONYMOUS, + bitflags_bits!(prot), + bitflags_bits!(flags | MapFlags::from_bits_retain(bitcast!(c::MAP_ANONYMOUS))), no_fd(), 0, ); @@ -119,7 +118,7 @@ pub(crate) unsafe fn mprotect( len: usize, flags: MprotectFlags, ) -> io::Result<()> { - ret(c::mprotect(ptr, len, flags.bits())) + ret(c::mprotect(ptr, len, bitflags_bits!(flags))) } pub(crate) unsafe fn munmap(ptr: *mut c::c_void, len: usize) -> io::Result<()> { @@ -137,7 +136,7 @@ pub(crate) unsafe fn mremap( new_size: usize, flags: MremapFlags, ) -> io::Result<*mut c::c_void> { - let res = c::mremap(old_address, old_size, new_size, flags.bits()); + let res = c::mremap(old_address, old_size, new_size, bitflags_bits!(flags)); if res == c::MAP_FAILED { Err(io::Errno::last_os_error()) } else { @@ -162,7 +161,7 @@ pub(crate) unsafe fn mremap_fixed( old_address, old_size, new_size, - flags.bits() | c::MAP_FIXED, + bitflags_bits!(flags | MremapFlags::from_bits_retain(bitcast!(c::MAP_FIXED))), new_address, ); if res == c::MAP_FAILED { @@ -185,7 +184,7 @@ pub(crate) unsafe fn mlock(addr: *mut c::c_void, length: usize) -> io::Result<() /// /// `mlock_with` operates on raw pointers and may round out to the nearest page /// boundaries. -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] #[inline] pub(crate) unsafe fn mlock_with( addr: *mut c::c_void, @@ -200,7 +199,7 @@ pub(crate) unsafe fn mlock_with( ) via SYS_mlock2 -> c::c_int } - ret(mlock2(addr, length, flags.bits())) + ret(mlock2(addr, length, bitflags_bits!(flags))) } /// # Safety @@ -212,7 +211,12 @@ pub(crate) unsafe fn munlock(addr: *mut c::c_void, length: usize) -> io::Result< ret(c::munlock(addr, length)) } -#[cfg(any(target_os = "android", target_os = "linux"))] +#[cfg(linux_kernel)] pub(crate) unsafe fn userfaultfd(flags: UserfaultfdFlags) -> io::Result<OwnedFd> { - syscall_ret_owned_fd(c::syscall(c::SYS_userfaultfd, flags.bits())) + syscall! { + fn userfaultfd( + flags: c::c_int + ) via SYS_userfaultfd -> c::c_int + } + ret_owned_fd(userfaultfd(bitflags_bits!(flags))) } |