Skip to content

Commit bde2eb4

Browse files
committed
Auto merge of #1460 - RalfJung:modules, r=RalfJung
Re-organize platform-specific shims Move platform-specific code to `shims::{posix::{linux, macos}, windows}`. Also make it private in these modules to ensure we are reasonably structured.
2 parents 02a721b + af5887e commit bde2eb4

19 files changed

+67
-47
lines changed

src/intptrcast.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_data_structures::fx::FxHashMap;
99
use rustc_mir::interpret::{AllocCheck, AllocId, InterpResult, Memory, Machine, Pointer, PointerArithmetic};
1010
use rustc_target::abi::{Size, HasDataLayout};
1111

12-
use crate::{Evaluator, Tag, STACK_ADDR, CheckInAllocMsg};
12+
use crate::*;
1313

1414
pub type MemoryExtra = RefCell<GlobalState>;
1515

src/lib.rs

+11-12
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,22 @@ mod stacked_borrows;
3434
mod sync;
3535
mod thread;
3636

37+
// Establish a "crate-wide prelude": we often import `crate::*`.
38+
3739
// Make all those symbols available in the same place as our own.
3840
pub use rustc_mir::interpret::*;
3941
// Resolve ambiguity.
4042
pub use rustc_mir::interpret::{self, AllocMap, PlaceTy};
4143

42-
pub use crate::shims::dlsym::{Dlsym, EvalContextExt as DlsymEvalContextExt};
43-
pub use crate::shims::env::{EnvVars, EvalContextExt as EnvEvalContextExt};
44-
pub use crate::shims::foreign_items::EvalContextExt as ForeignItemsEvalContextExt;
45-
pub use crate::shims::fs::{DirHandler, EvalContextExt as FileEvalContextExt, FileHandler};
46-
pub use crate::shims::intrinsics::EvalContextExt as IntrinsicsEvalContextExt;
47-
pub use crate::shims::os_str::EvalContextExt as OsStrEvalContextExt;
48-
pub use crate::shims::panic::{CatchUnwindData, EvalContextExt as PanicEvalContextExt};
49-
pub use crate::shims::sync::{EvalContextExt as SyncShimsEvalContextExt};
50-
pub use crate::shims::thread::EvalContextExt as ThreadShimsEvalContextExt;
51-
pub use crate::shims::time::EvalContextExt as TimeEvalContextExt;
52-
pub use crate::shims::tls::{EvalContextExt as TlsEvalContextExt, TlsData};
53-
pub use crate::shims::EvalContextExt as ShimsEvalContextExt;
44+
pub use crate::shims::dlsym::{Dlsym, EvalContextExt as _};
45+
pub use crate::shims::env::{EnvVars, EvalContextExt as _};
46+
pub use crate::shims::foreign_items::EvalContextExt as _;
47+
pub use crate::shims::intrinsics::EvalContextExt as _;
48+
pub use crate::shims::os_str::EvalContextExt as _;
49+
pub use crate::shims::time::EvalContextExt as _;
50+
pub use crate::shims::panic::{CatchUnwindData, EvalContextExt as _};
51+
pub use crate::shims::tls::{EvalContextExt as _, TlsData};
52+
pub use crate::shims::EvalContextExt as _;
5453

5554
pub use crate::diagnostics::{
5655
register_diagnostic, report_error, EvalContextExt as DiagnosticsEvalContextExt,

src/machine.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,8 @@ pub struct Evaluator<'mir, 'tcx> {
241241
/// Whether to enforce the validity invariant.
242242
pub(crate) validate: bool,
243243

244-
pub(crate) file_handler: FileHandler,
245-
pub(crate) dir_handler: DirHandler,
244+
pub(crate) file_handler: shims::posix::FileHandler,
245+
pub(crate) dir_handler: shims::posix::DirHandler,
246246

247247
/// The temporary used for storing the argument of
248248
/// the call to `miri_start_panic` (the panic payload) when unwinding.

src/shims/foreign_items.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
mod windows;
2-
mod posix;
3-
41
use std::{convert::{TryInto, TryFrom}, iter};
52

63
use rustc_hir::def_id::DefId;
@@ -455,13 +452,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
455452
// Architecture-specific shims
456453
"llvm.x86.sse2.pause" if this.tcx.sess.target.target.arch == "x86" || this.tcx.sess.target.target.arch == "x86_64" => {
457454
let &[] = check_arg_count(args)?;
458-
this.sched_yield()?;
455+
this.yield_active_thread();
459456
}
460457

461458
// Platform-specific shims
462459
_ => match this.tcx.sess.target.target.target_os.as_str() {
463-
"linux" | "macos" => return posix::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
464-
"windows" => return windows::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
460+
"linux" | "macos" => return shims::posix::foreign_items::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
461+
"windows" => return shims::windows::foreign_items::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
465462
target => throw_unsup_format!("the target `{}` is not supported", target),
466463
}
467464
};

src/shims/mod.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
pub mod dlsym;
2-
pub mod env;
1+
32
pub mod foreign_items;
4-
pub mod fs;
53
pub mod intrinsics;
4+
pub mod posix;
5+
pub mod windows;
6+
7+
pub mod dlsym;
8+
pub mod env;
69
pub mod os_str;
710
pub mod panic;
8-
pub mod sync;
9-
pub mod thread;
1011
pub mod time;
1112
pub mod tls;
1213

14+
// End module management, begin local code
15+
1316
use std::convert::TryFrom;
1417

1518
use log::trace;

src/shims/foreign_items/posix.rs renamed to src/shims/posix/foreign_items.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
mod linux;
2-
mod macos;
3-
41
use std::convert::TryFrom;
52

63
use log::trace;
74

8-
use crate::*;
9-
use helpers::check_arg_count;
105
use rustc_middle::mir;
116
use rustc_target::abi::{Align, LayoutOf, Size};
127

8+
use crate::*;
9+
use helpers::check_arg_count;
10+
use shims::posix::fs::EvalContextExt as _;
11+
use shims::posix::sync::EvalContextExt as _;
12+
use shims::posix::thread::EvalContextExt as _;
13+
1314
impl<'mir, 'tcx: 'mir> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
1415
pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx> {
1516
fn emulate_foreign_item_by_name(
@@ -476,8 +477,8 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
476477
// Platform-specific shims
477478
_ => {
478479
match this.tcx.sess.target.target.target_os.as_str() {
479-
"linux" => return linux::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
480-
"macos" => return macos::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
480+
"linux" => return shims::posix::linux::foreign_items::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
481+
"macos" => return shims::posix::macos::foreign_items::EvalContextExt::emulate_foreign_item_by_name(this, link_name, args, dest, ret),
481482
_ => unreachable!(),
482483
}
483484
}

src/shims/fs.rs renamed to src/shims/posix/fs.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ use log::trace;
1010
use rustc_data_structures::fx::FxHashMap;
1111
use rustc_target::abi::{Align, LayoutOf, Size};
1212

13-
use crate::stacked_borrows::Tag;
1413
use crate::*;
14+
use stacked_borrows::Tag;
1515
use helpers::{check_arg_count, immty_from_int_checked, immty_from_uint_checked};
1616
use shims::time::system_time_to_duration;
1717

1818
#[derive(Debug)]
19-
pub struct FileHandle {
19+
struct FileHandle {
2020
file: File,
2121
writable: bool,
2222
}

src/shims/foreign_items/posix/linux.rs renamed to src/shims/posix/linux/foreign_items.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
use crate::*;
2-
use helpers::check_arg_count;
31
use rustc_middle::mir;
42

3+
use crate::*;
4+
use crate::helpers::check_arg_count;
5+
use shims::posix::fs::EvalContextExt as _;
6+
use shims::posix::sync::EvalContextExt as _;
7+
use shims::posix::thread::EvalContextExt as _;
8+
59
impl<'mir, 'tcx: 'mir> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
610
pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx> {
711
fn emulate_foreign_item_by_name(

src/shims/posix/linux/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod foreign_items;

src/shims/foreign_items/posix/macos.rs renamed to src/shims/posix/macos/foreign_items.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
use rustc_middle::mir;
2+
13
use crate::*;
24
use helpers::check_arg_count;
3-
use rustc_middle::mir;
5+
use shims::posix::fs::EvalContextExt as _;
6+
use shims::posix::thread::EvalContextExt as _;
47

58
impl<'mir, 'tcx: 'mir> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
69
pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx> {

src/shims/posix/macos/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod foreign_items;

src/shims/posix/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
pub mod foreign_items;
2+
3+
mod fs;
4+
mod sync;
5+
mod thread;
6+
7+
mod linux;
8+
mod macos;
9+
10+
pub use fs::{DirHandler, FileHandler};

src/shims/sync.rs renamed to src/shims/posix/sync.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ use std::ops::Not;
55
use rustc_middle::ty::{layout::TyAndLayout, TyKind, TypeAndMut};
66
use rustc_target::abi::{LayoutOf, Size};
77

8-
use crate::stacked_borrows::Tag;
9-
use crate::thread::Time;
10-
118
use crate::*;
9+
use stacked_borrows::Tag;
10+
use thread::Time;
11+
1212

1313
fn assert_ptr_target_min_size<'mir, 'tcx: 'mir>(
1414
ecx: &MiriEvalContext<'mir, 'tcx>,
@@ -522,6 +522,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
522522

523523
mutex_set_kind(this, mutex_op, ScalarMaybeUninit::Uninit)?;
524524
mutex_set_id(this, mutex_op, ScalarMaybeUninit::Uninit)?;
525+
// FIXME: delete interpreter state associated with this mutex.
525526

526527
Ok(0)
527528
}
@@ -640,6 +641,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
640641
}
641642

642643
rwlock_set_id(this, rwlock_op, ScalarMaybeUninit::Uninit)?;
644+
// FIXME: delete interpreter state associated with this rwlock.
643645

644646
Ok(0)
645647
}
@@ -833,6 +835,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
833835
}
834836
cond_set_id(this, cond_op, ScalarMaybeUninit::Uninit)?;
835837
cond_set_clock_id(this, cond_op, ScalarMaybeUninit::Uninit)?;
838+
// FIXME: delete interpreter state associated with this condvar.
836839

837840
Ok(0)
838841
}
File renamed without changes.

src/shims/tls.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ use rustc_data_structures::fx::FxHashMap;
1010
use rustc_middle::ty;
1111
use rustc_target::abi::{Size, HasDataLayout};
1212

13-
use crate::{
14-
HelpersEvalContextExt, InterpResult, MPlaceTy, Scalar, StackPopCleanup, Tag, ThreadId,
15-
ThreadsEvalContextExt,
16-
};
13+
use crate::*;
1714

1815
pub type TlsKey = u128;
1916

src/shims/windows/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod foreign_items;

src/thread.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ pub enum ThreadState {
9191
/// responsibility of the synchronization primitives to track threads that
9292
/// are blocked by them.
9393
BlockedOnSync,
94-
/// The thread has terminated its execution (we do not delete terminated
95-
/// threads).
94+
/// The thread has terminated its execution. We do not delete terminated
95+
/// threads (FIXME: why?).
9696
Terminated,
9797
}
9898

0 commit comments

Comments
 (0)