From 369efd0d8e477166a6195334bd2ad6a18d41b267 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Mon, 19 Sep 2022 22:40:04 +0000 Subject: [PATCH 1/2] Lint fixes --- src/bin/miri.rs | 1 - src/concurrency/sync.rs | 2 +- src/shims/unix/fs.rs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/bin/miri.rs b/src/bin/miri.rs index 644a8129eee7f..7d32ee4257326 100644 --- a/src/bin/miri.rs +++ b/src/bin/miri.rs @@ -7,7 +7,6 @@ extern crate rustc_data_structures; extern crate rustc_driver; -extern crate rustc_errors; extern crate rustc_hir; extern crate rustc_interface; extern crate rustc_metadata; diff --git a/src/concurrency/sync.rs b/src/concurrency/sync.rs index d301ced851173..464f452ca7696 100644 --- a/src/concurrency/sync.rs +++ b/src/concurrency/sync.rs @@ -44,7 +44,7 @@ macro_rules! declare_id { } impl $name { - pub fn to_u32_scalar<'tcx>(&self) -> Scalar { + pub fn to_u32_scalar(&self) -> Scalar { Scalar::from_u32(self.0.get()) } } diff --git a/src/shims/unix/fs.rs b/src/shims/unix/fs.rs index edeb2001f93a0..8464c4589ed5d 100644 --- a/src/shims/unix/fs.rs +++ b/src/shims/unix/fs.rs @@ -246,7 +246,7 @@ impl FileDescriptor for DummyOutput { Ok(Ok(bytes.len())) } - fn dup<'tcx>(&mut self) -> io::Result> { + fn dup(&mut self) -> io::Result> { Ok(Box::new(DummyOutput)) } } From 4f357956b868cd5d6c1a9ff0608dfcd7d5bbe2a3 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Wed, 21 Sep 2022 09:49:30 +0000 Subject: [PATCH 2/2] Only support libffi on unix for now --- Cargo.toml | 6 ++---- README.md | 2 +- src/machine.rs | 4 +++- src/shims/foreign_items.rs | 2 ++ src/shims/mod.rs | 1 + 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0a3dfc2a84e31..0c547d585d198 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,8 +20,6 @@ doctest = false # and no doc tests [dependencies] getrandom = { version = "0.2", features = ["std"] } env_logger = "0.9" -libffi = "3.0.0" -libloading = "0.7" log = "0.4" shell-escape = "0.1.4" rand = "0.8" @@ -33,10 +31,10 @@ smallvec = "1.7" rustc-workspace-hack = "1.0.0" measureme = "10.0.0" -# Enable some feature flags that dev-dependencies need but dependencies -# do not. This makes `./miri install` after `./miri build` faster. [target."cfg(unix)".dependencies] libc = "0.2" +libffi = "3.0.0" +libloading = "0.7" [dev-dependencies] colored = "2" diff --git a/README.md b/README.md index 72081f45499b8..1f4c52d5b8507 100644 --- a/README.md +++ b/README.md @@ -360,7 +360,7 @@ to Miri failing to detect cases of undefined behavior in a program. file descriptors will be mixed up. This is **work in progress**; currently, only integer arguments and return values are supported (and no, pointer/integer casts to work around this limitation will not work; - they will fail horribly). + they will fail horribly). It also only works on unix hosts for now. Follow [the discussion on supporting other types](https://github.com/rust-lang/miri/issues/2365). * `-Zmiri-measureme=` enables `measureme` profiling for the interpreted program. This can be used to find which parts of your program are executing slowly under Miri. diff --git a/src/machine.rs b/src/machine.rs index 8db546463c2a1..f11771911fa08 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -400,6 +400,7 @@ pub struct MiriMachine<'mir, 'tcx> { pub(crate) basic_block_count: u64, /// Handle of the optional shared object file for external functions. + #[cfg(unix)] pub external_so_lib: Option<(libloading::Library, std::path::PathBuf)>, /// Run a garbage collector for SbTags every N basic blocks. @@ -410,7 +411,6 @@ pub struct MiriMachine<'mir, 'tcx> { impl<'mir, 'tcx> MiriMachine<'mir, 'tcx> { pub(crate) fn new(config: &MiriConfig, layout_cx: LayoutCx<'tcx, TyCtxt<'tcx>>) -> Self { - let target_triple = &layout_cx.tcx.sess.opts.target_triple.to_string(); let local_crates = helpers::get_local_crates(layout_cx.tcx); let layouts = PrimitiveLayouts::new(layout_cx).expect("Couldn't get layouts of primitive types"); @@ -462,7 +462,9 @@ impl<'mir, 'tcx> MiriMachine<'mir, 'tcx> { report_progress: config.report_progress, basic_block_count: 0, clock: Clock::new(config.isolated_op == IsolatedOp::Allow), + #[cfg(unix)] external_so_lib: config.external_so_file.as_ref().map(|lib_file_path| { + let target_triple = &layout_cx.tcx.sess.opts.target_triple.to_string(); // Check if host target == the session target. if env!("TARGET") != target_triple { panic!( diff --git a/src/shims/foreign_items.rs b/src/shims/foreign_items.rs index 6d052083d370c..bb62a2a7ec1b5 100644 --- a/src/shims/foreign_items.rs +++ b/src/shims/foreign_items.rs @@ -23,6 +23,7 @@ use rustc_target::{ use super::backtrace::EvalContextExt as _; use crate::helpers::{convert::Truncate, target_os_is_unix}; +#[cfg(unix)] use crate::shims::ffi_support::EvalContextExt as _; use crate::*; @@ -371,6 +372,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { let this = self.eval_context_mut(); // First deal with any external C functions in linked .so file. + #[cfg(unix)] if this.machine.external_so_lib.as_ref().is_some() { // An Ok(false) here means that the function being called was not exported // by the specified `.so` file; we should continue and check if it corresponds to diff --git a/src/shims/mod.rs b/src/shims/mod.rs index 93083b486bfbf..8cb648e517328 100644 --- a/src/shims/mod.rs +++ b/src/shims/mod.rs @@ -1,6 +1,7 @@ #![warn(clippy::integer_arithmetic)] mod backtrace; +#[cfg(unix)] pub mod ffi_support; pub mod foreign_items; pub mod intrinsics;