aya: move mmap from perf_buffer.rs to sys/mod.rs

mmap() is needed for the ring buffer implementation, so move it to a common module
reviewable/pr629/r63
William Findlay 4 years ago committed by Tamir Duberstein
parent 37547d9503
commit 7ce728c9c8
No known key found for this signature in database

@ -91,8 +91,8 @@ mod tests {
sys::{override_syscall, SysResult, Syscall}, sys::{override_syscall, SysResult, Syscall},
}; };
use assert_matches::assert_matches; use assert_matches::assert_matches;
use libc::{EFAULT, ENOENT}; use libc::{c_long, EFAULT, ENOENT};
use std::{ffi::c_long, io}; use std::io;
fn new_obj_map() -> obj::Map { fn new_obj_map() -> obj::Map {
obj::Map::Legacy(LegacyMap { obj::Map::Legacy(LegacyMap {

@ -103,10 +103,10 @@ impl<T: Borrow<MapData>, K: Pod, V: Pod> IterableMap<K, V> for HashMap<T, K, V>
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::{ffi::c_long, io}; use std::io;
use assert_matches::assert_matches; use assert_matches::assert_matches;
use libc::{EFAULT, ENOENT}; use libc::{c_long, EFAULT, ENOENT};
use crate::{ use crate::{
generated::{ generated::{

@ -208,8 +208,8 @@ mod tests {
sys::{override_syscall, SysResult, Syscall}, sys::{override_syscall, SysResult, Syscall},
}; };
use assert_matches::assert_matches; use assert_matches::assert_matches;
use libc::{EFAULT, ENOENT}; use libc::{c_long, EFAULT, ENOENT};
use std::{ffi::c_long, io, mem, net::Ipv4Addr}; use std::{io, mem, net::Ipv4Addr};
fn new_obj_map() -> obj::Map { fn new_obj_map() -> obj::Map {
obj::Map::Legacy(LegacyMap { obj::Map::Legacy(LegacyMap {

@ -1,5 +1,4 @@
use std::{ use std::{
ffi::c_void,
io, mem, io, mem,
os::fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd}, os::fd::{AsFd, AsRawFd, BorrowedFd, OwnedFd, RawFd},
ptr, slice, ptr, slice,
@ -7,7 +6,7 @@ use std::{
}; };
use bytes::BytesMut; use bytes::BytesMut;
use libc::{c_int, munmap, MAP_FAILED, MAP_SHARED, PROT_READ, PROT_WRITE}; use libc::{c_void, munmap, MAP_FAILED, MAP_SHARED, PROT_READ, PROT_WRITE};
use thiserror::Error; use thiserror::Error;
use crate::{ use crate::{
@ -15,7 +14,7 @@ use crate::{
perf_event_header, perf_event_mmap_page, perf_event_header, perf_event_mmap_page,
perf_event_type::{PERF_RECORD_LOST, PERF_RECORD_SAMPLE}, perf_event_type::{PERF_RECORD_LOST, PERF_RECORD_SAMPLE},
}, },
sys::{perf_event_ioctl, perf_event_open_bpf, SysResult}, sys::{mmap, perf_event_ioctl, perf_event_open_bpf, SysResult},
PERF_EVENT_IOC_DISABLE, PERF_EVENT_IOC_ENABLE, PERF_EVENT_IOC_DISABLE, PERF_EVENT_IOC_ENABLE,
}; };
@ -282,25 +281,6 @@ impl Drop for PerfBuffer {
} }
} }
#[cfg_attr(test, allow(unused_variables))]
unsafe fn mmap(
addr: *mut c_void,
len: usize,
prot: c_int,
flags: c_int,
fd: BorrowedFd<'_>,
offset: libc::off_t,
) -> *mut c_void {
#[cfg(not(test))]
return libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset);
#[cfg(test)]
use crate::sys::TEST_MMAP_RET;
#[cfg(test)]
TEST_MMAP_RET.with(|ret| *ret.borrow())
}
#[derive(Debug)] #[derive(Debug)]
#[repr(C)] #[repr(C)]
struct Sample { struct Sample {

@ -1,6 +1,6 @@
use std::{cell::RefCell, ffi::c_long, io, ptr}; use std::{cell::RefCell, io, ptr};
use libc::c_void; use libc::{c_long, c_void};
use super::{SysResult, Syscall}; use super::{SysResult, Syscall};

@ -5,7 +5,7 @@ mod perf_event;
#[cfg(test)] #[cfg(test)]
mod fake; mod fake;
use libc::{c_int, c_long, pid_t, SYS_bpf, SYS_perf_event_open}; use libc::{c_int, c_long, c_void, pid_t, SYS_bpf, SYS_perf_event_open};
use std::{ use std::{
io, mem, io, mem,
os::fd::{AsRawFd as _, BorrowedFd}, os::fd::{AsRawFd as _, BorrowedFd},
@ -114,3 +114,19 @@ fn syscall(call: Syscall<'_>) -> SysResult<c_long> {
ret => Err((ret, io::Error::last_os_error())), ret => Err((ret, io::Error::last_os_error())),
} }
} }
#[cfg_attr(test, allow(unused_variables))]
pub(crate) unsafe fn mmap(
addr: *mut c_void,
len: usize,
prot: c_int,
flags: c_int,
fd: BorrowedFd<'_>,
offset: libc::off_t,
) -> *mut c_void {
#[cfg(not(test))]
return libc::mmap(addr, len, prot, flags, fd.as_raw_fd(), offset);
#[cfg(test)]
TEST_MMAP_RET.with(|ret| *ret.borrow())
}

@ -1,10 +1,10 @@
use std::{ use std::{
ffi::{c_long, CString, OsStr}, ffi::{CString, OsStr},
io, mem, io, mem,
os::fd::{BorrowedFd, FromRawFd as _, OwnedFd}, os::fd::{BorrowedFd, FromRawFd as _, OwnedFd},
}; };
use libc::{c_int, pid_t}; use libc::{c_int, c_long, pid_t};
use crate::generated::{ use crate::generated::{
perf_event_attr, perf_event_attr,

Loading…
Cancel
Save