Skip to content

Commit 366001f

Browse files
authored
Merge pull request rust-lang#4016 from YohDeadfall/android-epoll
Added epoll and eventfd for Android
2 parents d125945 + 065d9b5 commit 366001f

File tree

16 files changed

+47
-22
lines changed

16 files changed

+47
-22
lines changed

src/tools/miri/ci/ci.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ case $HOST_TARGET in
154154
TEST_TARGET=i686-unknown-freebsd run_tests_minimal $BASIC $UNIX time hashmap random threadname pthread fs libc-pipe
155155
TEST_TARGET=x86_64-unknown-illumos run_tests_minimal $BASIC $UNIX time hashmap random thread sync available-parallelism tls libc-pipe
156156
TEST_TARGET=x86_64-pc-solaris run_tests_minimal $BASIC $UNIX time hashmap random thread sync available-parallelism tls libc-pipe
157-
TEST_TARGET=aarch64-linux-android run_tests_minimal $BASIC $UNIX time hashmap random sync threadname pthread
157+
TEST_TARGET=aarch64-linux-android run_tests_minimal $BASIC $UNIX time hashmap random sync threadname pthread epoll eventfd
158158
TEST_TARGET=wasm32-wasip2 run_tests_minimal $BASIC wasm
159159
TEST_TARGET=wasm32-unknown-unknown run_tests_minimal no_std empty_main wasm # this target doesn't really have std
160160
TEST_TARGET=thumbv7em-none-eabihf run_tests_minimal no_std

src/tools/miri/src/shims/unix/android/foreign_items.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ use rustc_abi::ExternAbi;
22
use rustc_span::Symbol;
33

44
use crate::shims::unix::android::thread::prctl;
5-
use crate::shims::unix::linux::syscall::syscall;
5+
use crate::shims::unix::linux_like::epoll::EvalContextExt as _;
6+
use crate::shims::unix::linux_like::eventfd::EvalContextExt as _;
7+
use crate::shims::unix::linux_like::syscall::syscall;
68
use crate::*;
79

810
pub fn is_dyn_sym(_name: &str) -> bool {
@@ -20,6 +22,31 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
2022
) -> InterpResult<'tcx, EmulateItemResult> {
2123
let this = self.eval_context_mut();
2224
match link_name.as_str() {
25+
// epoll, eventfd
26+
"epoll_create1" => {
27+
let [flag] =
28+
this.check_shim(abi, ExternAbi::C { unwind: false }, link_name, args)?;
29+
let result = this.epoll_create1(flag)?;
30+
this.write_scalar(result, dest)?;
31+
}
32+
"epoll_ctl" => {
33+
let [epfd, op, fd, event] =
34+
this.check_shim(abi, ExternAbi::C { unwind: false }, link_name, args)?;
35+
let result = this.epoll_ctl(epfd, op, fd, event)?;
36+
this.write_scalar(result, dest)?;
37+
}
38+
"epoll_wait" => {
39+
let [epfd, events, maxevents, timeout] =
40+
this.check_shim(abi, ExternAbi::C { unwind: false }, link_name, args)?;
41+
this.epoll_wait(epfd, events, maxevents, timeout, dest)?;
42+
}
43+
"eventfd" => {
44+
let [val, flag] =
45+
this.check_shim(abi, ExternAbi::C { unwind: false }, link_name, args)?;
46+
let result = this.eventfd(val, flag)?;
47+
this.write_scalar(result, dest)?;
48+
}
49+
2350
// Miscellaneous
2451
"__errno" => {
2552
let [] = this.check_shim(abi, ExternAbi::C { unwind: false }, link_name, args)?;

src/tools/miri/src/shims/unix/fd.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use std::rc::{Rc, Weak};
1010
use rustc_abi::Size;
1111

1212
use crate::helpers::check_min_arg_count;
13-
use crate::shims::unix::linux::epoll::EpollReadyEvents;
13+
use crate::shims::unix::linux_like::epoll::EpollReadyEvents;
1414
use crate::shims::unix::*;
1515
use crate::*;
1616

src/tools/miri/src/shims/unix/linux/foreign_items.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use rustc_abi::ExternAbi;
22
use rustc_span::Symbol;
33

4-
use self::shims::unix::linux::epoll::EvalContextExt as _;
5-
use self::shims::unix::linux::eventfd::EvalContextExt as _;
64
use self::shims::unix::linux::mem::EvalContextExt as _;
7-
use self::shims::unix::linux::syscall::syscall;
5+
use self::shims::unix::linux_like::epoll::EvalContextExt as _;
6+
use self::shims::unix::linux_like::eventfd::EvalContextExt as _;
7+
use self::shims::unix::linux_like::syscall::syscall;
88
use crate::machine::{SIGRTMAX, SIGRTMIN};
99
use crate::shims::unix::foreign_items::EvalContextExt as _;
1010
use crate::shims::unix::*;
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
1-
pub mod epoll;
2-
pub mod eventfd;
31
pub mod foreign_items;
42
pub mod mem;
5-
pub mod sync;
6-
pub mod syscall;

src/tools/miri/src/shims/unix/linux/eventfd.rs renamed to src/tools/miri/src/shims/unix/linux_like/eventfd.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::io::ErrorKind;
55

66
use crate::concurrency::VClock;
77
use crate::shims::unix::fd::{FileDescriptionRef, WeakFileDescriptionRef};
8-
use crate::shims::unix::linux::epoll::{EpollReadyEvents, EvalContextExt as _};
8+
use crate::shims::unix::linux_like::epoll::{EpollReadyEvents, EvalContextExt as _};
99
use crate::shims::unix::*;
1010
use crate::*;
1111

@@ -144,9 +144,6 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
144144
fn eventfd(&mut self, val: &OpTy<'tcx>, flags: &OpTy<'tcx>) -> InterpResult<'tcx, Scalar> {
145145
let this = self.eval_context_mut();
146146

147-
// eventfd is Linux specific.
148-
this.assert_target_os("linux", "eventfd");
149-
150147
let val = this.read_scalar(val)?.to_u32()?;
151148
let mut flags = this.read_scalar(flags)?.to_i32()?;
152149

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
pub mod epoll;
2+
pub mod eventfd;
3+
pub mod sync;
4+
pub mod syscall;

src/tools/miri/src/shims/unix/linux/syscall.rs renamed to src/tools/miri/src/shims/unix/linux_like/syscall.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use rustc_abi::ExternAbi;
22
use rustc_span::Symbol;
33

4-
use self::shims::unix::linux::eventfd::EvalContextExt as _;
54
use crate::helpers::check_min_arg_count;
6-
use crate::shims::unix::linux::sync::futex;
5+
use crate::shims::unix::linux_like::eventfd::EvalContextExt as _;
6+
use crate::shims::unix::linux_like::sync::futex;
77
use crate::*;
88

99
pub fn syscall<'tcx>(

src/tools/miri/src/shims/unix/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ mod unnamed_socket;
1111
mod android;
1212
mod freebsd;
1313
mod linux;
14+
mod linux_like;
1415
mod macos;
1516
mod solarish;
1617

1718
// All the Unix-specific extension traits
1819
pub use self::env::{EvalContextExt as _, UnixEnvVars};
1920
pub use self::fd::{EvalContextExt as _, FdTable, FileDescription};
2021
pub use self::fs::{DirTable, EvalContextExt as _};
21-
pub use self::linux::epoll::EpollInterestTable;
22+
pub use self::linux_like::epoll::EpollInterestTable;
2223
pub use self::mem::EvalContextExt as _;
2324
pub use self::sync::EvalContextExt as _;
2425
pub use self::thread::{EvalContextExt as _, ThreadNameResult};

src/tools/miri/src/shims/unix/unnamed_socket.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use rustc_abi::Size;
1111

1212
use crate::concurrency::VClock;
1313
use crate::shims::unix::fd::{FileDescriptionRef, WeakFileDescriptionRef};
14-
use crate::shims::unix::linux::epoll::{EpollReadyEvents, EvalContextExt as _};
14+
use crate::shims::unix::linux_like::epoll::{EpollReadyEvents, EvalContextExt as _};
1515
use crate::shims::unix::*;
1616
use crate::*;
1717

src/tools/miri/tests/fail-dep/libc/libc-epoll-data-race.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//! and we only read one of them, we do not synchronize with the other events
33
//! and therefore still report a data race for things that need to see the second event
44
//! to be considered synchronized.
5-
//@only-target: linux
5+
//@only-target: linux android
66
// ensure deterministic schedule
77
//@compile-flags: -Zmiri-preemption-rate=0
88

src/tools/miri/tests/pass-dep/libc/libc-epoll-blocking.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//@only-target: linux
1+
//@only-target: linux android
22
// test_epoll_block_then_unblock and test_epoll_race depend on a deterministic schedule.
33
//@compile-flags: -Zmiri-preemption-rate=0
44

src/tools/miri/tests/pass-dep/libc/libc-epoll-no-blocking.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//@only-target: linux
1+
//@only-target: linux android
22

33
use std::convert::TryInto;
44

src/tools/miri/tests/pass-dep/libc/libc-eventfd.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//@only-target: linux
1+
//@only-target: linux android
22
// test_race, test_blocking_read and test_blocking_write depend on a deterministic schedule.
33
//@compile-flags: -Zmiri-preemption-rate=0
44

0 commit comments

Comments
 (0)