diff --git a/src/header/sys_mman/mod.rs b/src/header/sys_mman/mod.rs index 2a055e7c22ac3d139666a619ce9291b06712c204..27b36e5b66b6b1380553812243f139c839d45f10 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 d4a28bdd2d6764b6f8d0a95ae001e5549814c872..fe149a2b02f5eba677395c75c1533872d2f118c4 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 9a484c1301b3235a32cacd814cbe34a83e9f8855..9900e378d36743fc63da293a0c6e1f485ba93d40 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 697482aa3d78c344b69f16c1f723260e39f1b90b..00af8a08cfe1522f71e7efebde02325e08938859 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;