Skip to content

Commit

Permalink
Auto merge of rust-lang#2555 - oli-obk:libffi-is-unhappy, r=RalfJung
Browse files Browse the repository at this point in the history
Only support libffi on unix for now
  • Loading branch information
bors committed Sep 21, 2022
2 parents eb84c8b + 4f35795 commit 351afbb
Show file tree
Hide file tree
Showing 8 changed files with 11 additions and 9 deletions.
6 changes: 2 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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=<name>` enables `measureme` profiling for the interpreted program.
This can be used to find which parts of your program are executing slowly under Miri.
Expand Down
1 change: 0 additions & 1 deletion src/bin/miri.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/concurrency/sync.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ macro_rules! declare_id {
}

impl $name {
pub fn to_u32_scalar<'tcx>(&self) -> Scalar<Provenance> {
pub fn to_u32_scalar(&self) -> Scalar<Provenance> {
Scalar::from_u32(self.0.get())
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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");
Expand Down Expand Up @@ -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!(
Expand Down
2 changes: 2 additions & 0 deletions src/shims/foreign_items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::*;

Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions src/shims/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#![warn(clippy::integer_arithmetic)]

mod backtrace;
#[cfg(unix)]
pub mod ffi_support;
pub mod foreign_items;
pub mod intrinsics;
Expand Down
2 changes: 1 addition & 1 deletion src/shims/unix/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ impl FileDescriptor for DummyOutput {
Ok(Ok(bytes.len()))
}

fn dup<'tcx>(&mut self) -> io::Result<Box<dyn FileDescriptor>> {
fn dup(&mut self) -> io::Result<Box<dyn FileDescriptor>> {
Ok(Box::new(DummyOutput))
}
}
Expand Down

0 comments on commit 351afbb

Please sign in to comment.