Use fmap2 to support passing an address.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use core::{mem, ptr, result::Result as CoreResult, slice};
|
||||
use syscall::{
|
||||
self,
|
||||
data::{Map, Stat as redox_stat, StatVfs as redox_statvfs, TimeSpec as redox_timespec},
|
||||
data::{Map2, Stat as redox_stat, StatVfs as redox_statvfs, TimeSpec as redox_timespec},
|
||||
PtraceEvent, Result,
|
||||
};
|
||||
|
||||
@@ -658,19 +658,20 @@ impl Pal for Sys {
|
||||
}
|
||||
|
||||
unsafe fn mmap(
|
||||
_addr: *mut c_void,
|
||||
addr: *mut c_void,
|
||||
len: usize,
|
||||
prot: c_int,
|
||||
flags: c_int,
|
||||
fildes: c_int,
|
||||
off: off_t,
|
||||
) -> *mut c_void {
|
||||
let map = Map {
|
||||
let map = Map2 {
|
||||
offset: off as usize,
|
||||
size: len,
|
||||
flags: syscall::MapFlags::from_bits_truncate(
|
||||
((prot as usize) << 16) | ((flags as usize) & 0xFFFF),
|
||||
),
|
||||
address: addr as usize,
|
||||
};
|
||||
|
||||
if flags & MAP_ANON == MAP_ANON {
|
||||
@@ -682,13 +683,13 @@ impl Pal for Sys {
|
||||
return !0 as *mut c_void;
|
||||
}
|
||||
|
||||
let addr = e(syscall::fmap(fd, &map)) as *mut c_void;
|
||||
let addr = e(syscall::fmap2(fd, &map)) as *mut c_void;
|
||||
|
||||
let _ = syscall::close(fd);
|
||||
|
||||
addr
|
||||
} else {
|
||||
e(syscall::fmap(fildes as usize, &map)) as *mut c_void
|
||||
e(syscall::fmap2(fildes as usize, &map)) as *mut c_void
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user