From 2ac349d2d2d2594781a1550f8b9f3bf33ed7a4e7 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Sun, 1 Dec 2019 10:58:47 -0700 Subject: [PATCH] Add msync function and stub for Redox --- src/header/sys_mman/mod.rs | 12 ++++++++---- src/platform/linux/mod.rs | 4 ++++ src/platform/pal/mod.rs | 2 ++ src/platform/redox/mod.rs | 12 ++++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/header/sys_mman/mod.rs b/src/header/sys_mman/mod.rs index 2a055e7c..27b36e5b 100644 --- a/src/header/sys_mman/mod.rs +++ b/src/header/sys_mman/mod.rs @@ -21,6 +21,10 @@ pub const MAP_FIXED: c_int = 0x0010; pub const MAP_ANON: c_int = 0x0020; pub const MAP_ANONYMOUS: c_int = MAP_ANON; +pub const MS_ASYNC: c_int = 0x0001; +pub const MS_INVALIDATE: c_int = 0x0002; +pub const MS_SYNC: c_int = 0x0004; + // #[no_mangle] pub extern "C" fn mlock(addr: *const c_void, len: usize) -> c_int { unimplemented!(); @@ -44,13 +48,13 @@ pub unsafe extern "C" fn mmap( } #[no_mangle] -pub unsafe extern "C" fn mprotect(addr: *mut c_void, len: usize, prot: c_int) -> c_int { +pub unsafe extern "C" fn mprotect(addr: *mut c_void, len: size_t, prot: c_int) -> c_int { Sys::mprotect(addr, len, prot) } -// #[no_mangle] -pub extern "C" fn msync(addr: *mut c_void, len: usize, flags: c_int) -> c_int { - unimplemented!(); +#[no_mangle] +pub unsafe extern "C" fn msync(addr: *mut c_void, len: size_t, flags: c_int) -> c_int { + Sys::msync(addr, len, flags) } // #[no_mangle] diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index d4a28bdd..fe149a2b 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -310,6 +310,10 @@ impl Pal for Sys { e(syscall!(MPROTECT, addr, len, prot)) as c_int } + unsafe fn msync(addr: *mut c_void, len: usize, flags: c_int) -> c_int { + e(syscall!(MSYNC, addr, len, flags)) as c_int + } + unsafe fn munmap(addr: *mut c_void, len: usize) -> c_int { e(syscall!(MUNMAP, addr, len)) as c_int } diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs index 9a484c13..9900e378 100644 --- a/src/platform/pal/mod.rs +++ b/src/platform/pal/mod.rs @@ -118,6 +118,8 @@ pub trait Pal { unsafe fn mprotect(addr: *mut c_void, len: usize, prot: c_int) -> c_int; + unsafe fn msync(addr: *mut c_void, len: usize, flags: c_int) -> c_int; + unsafe fn munmap(addr: *mut c_void, len: usize) -> c_int; fn nanosleep(rqtp: *const timespec, rmtp: *mut timespec) -> c_int; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 697482aa..00af8a08 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -675,6 +675,18 @@ impl Pal for Sys { )) as c_int } + unsafe fn msync(addr: *mut c_void, len: usize, flags: c_int) -> c_int { + eprintln!("msync {:p} {:x} {:x}", addr, len, flags); + e(Err(syscall::Error::new(syscall::ENOSYS))) as c_int + /* TODO + e(syscall::msync( + addr as usize, + len, + flags + )) as c_int + */ + } + unsafe fn munmap(addr: *mut c_void, _len: usize) -> c_int { if e(syscall::funmap(addr as usize)) == !0 { return !0; -- GitLab