1
Fork 0

Auto merge of #2555 - oli-obk:libffi-is-unhappy, r=RalfJung

Only support libffi on unix for now
This commit is contained in:
bors 2022-09-21 12:49:24 +00:00
commit 351afbbe1c
8 changed files with 11 additions and 9 deletions

View file

@ -20,8 +20,6 @@ doctest = false # and no doc tests
[dependencies] [dependencies]
getrandom = { version = "0.2", features = ["std"] } getrandom = { version = "0.2", features = ["std"] }
env_logger = "0.9" env_logger = "0.9"
libffi = "3.0.0"
libloading = "0.7"
log = "0.4" log = "0.4"
shell-escape = "0.1.4" shell-escape = "0.1.4"
rand = "0.8" rand = "0.8"
@ -33,10 +31,10 @@ smallvec = "1.7"
rustc-workspace-hack = "1.0.0" rustc-workspace-hack = "1.0.0"
measureme = "10.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] [target."cfg(unix)".dependencies]
libc = "0.2" libc = "0.2"
libffi = "3.0.0"
libloading = "0.7"
[dev-dependencies] [dev-dependencies]
colored = "2" colored = "2"

View file

@ -360,7 +360,7 @@ to Miri failing to detect cases of undefined behavior in a program.
file descriptors will be mixed up. file descriptors will be mixed up.
This is **work in progress**; currently, only integer arguments and return values are 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; 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). 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. * `-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. This can be used to find which parts of your program are executing slowly under Miri.

View file

@ -7,7 +7,6 @@
extern crate rustc_data_structures; extern crate rustc_data_structures;
extern crate rustc_driver; extern crate rustc_driver;
extern crate rustc_errors;
extern crate rustc_hir; extern crate rustc_hir;
extern crate rustc_interface; extern crate rustc_interface;
extern crate rustc_metadata; extern crate rustc_metadata;

View file

@ -44,7 +44,7 @@ macro_rules! declare_id {
} }
impl $name { 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()) Scalar::from_u32(self.0.get())
} }
} }

View file

@ -400,6 +400,7 @@ pub struct MiriMachine<'mir, 'tcx> {
pub(crate) basic_block_count: u64, pub(crate) basic_block_count: u64,
/// Handle of the optional shared object file for external functions. /// Handle of the optional shared object file for external functions.
#[cfg(unix)]
pub external_so_lib: Option<(libloading::Library, std::path::PathBuf)>, pub external_so_lib: Option<(libloading::Library, std::path::PathBuf)>,
/// Run a garbage collector for SbTags every N basic blocks. /// 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> { impl<'mir, 'tcx> MiriMachine<'mir, 'tcx> {
pub(crate) fn new(config: &MiriConfig, layout_cx: LayoutCx<'tcx, TyCtxt<'tcx>>) -> Self { 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 local_crates = helpers::get_local_crates(layout_cx.tcx);
let layouts = let layouts =
PrimitiveLayouts::new(layout_cx).expect("Couldn't get layouts of primitive types"); 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, report_progress: config.report_progress,
basic_block_count: 0, basic_block_count: 0,
clock: Clock::new(config.isolated_op == IsolatedOp::Allow), clock: Clock::new(config.isolated_op == IsolatedOp::Allow),
#[cfg(unix)]
external_so_lib: config.external_so_file.as_ref().map(|lib_file_path| { 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. // Check if host target == the session target.
if env!("TARGET") != target_triple { if env!("TARGET") != target_triple {
panic!( panic!(

View file

@ -23,6 +23,7 @@ use rustc_target::{
use super::backtrace::EvalContextExt as _; use super::backtrace::EvalContextExt as _;
use crate::helpers::{convert::Truncate, target_os_is_unix}; use crate::helpers::{convert::Truncate, target_os_is_unix};
#[cfg(unix)]
use crate::shims::ffi_support::EvalContextExt as _; use crate::shims::ffi_support::EvalContextExt as _;
use crate::*; use crate::*;
@ -371,6 +372,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> {
let this = self.eval_context_mut(); let this = self.eval_context_mut();
// First deal with any external C functions in linked .so file. // First deal with any external C functions in linked .so file.
#[cfg(unix)]
if this.machine.external_so_lib.as_ref().is_some() { if this.machine.external_so_lib.as_ref().is_some() {
// An Ok(false) here means that the function being called was not exported // 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 // by the specified `.so` file; we should continue and check if it corresponds to

View file

@ -1,6 +1,7 @@
#![warn(clippy::integer_arithmetic)] #![warn(clippy::integer_arithmetic)]
mod backtrace; mod backtrace;
#[cfg(unix)]
pub mod ffi_support; pub mod ffi_support;
pub mod foreign_items; pub mod foreign_items;
pub mod intrinsics; pub mod intrinsics;

View file

@ -246,7 +246,7 @@ impl FileDescriptor for DummyOutput {
Ok(Ok(bytes.len())) 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)) Ok(Box::new(DummyOutput))
} }
} }