Delegate to the actual panic runtime crate
This commit is contained in:
parent
82374ad9bd
commit
8936d67e7f
@ -134,7 +134,8 @@ fn emulate_foreign_item(
|
||||
// that is, calls to `extern "Rust" { fn __rust_start_panic(...) }`.
|
||||
// We forward this to the underlying *implementation* in "libpanic_unwind".
|
||||
"__rust_start_panic" => {
|
||||
let start_panic_instance = this.resolve_path(&["panic_unwind", "__rust_start_panic"])?;
|
||||
let panic_runtime = tcx.crate_name(tcx.injected_panic_runtime().expect("No panic runtime found!"));
|
||||
let start_panic_instance = this.resolve_path(&[&*panic_runtime.as_str(), "__rust_start_panic"])?;
|
||||
return Ok(Some(this.load_mir(start_panic_instance.def, None)?));
|
||||
}
|
||||
// Similarly, we forward calls to the `panic_impl` foreign item to its implementation.
|
||||
|
@ -47,13 +47,6 @@ fn handle_miri_start_panic(
|
||||
|
||||
trace!("miri_start_panic: {:?}", this.frame().span);
|
||||
|
||||
if this.tcx.tcx.sess.panic_strategy() == PanicStrategy::Abort {
|
||||
// FIXME: Add a better way of indicating 'abnormal' termination,
|
||||
// since this is not really an 'unsupported' behavior
|
||||
throw_unsup_format!("the evaluated program panicked");
|
||||
}
|
||||
|
||||
// Get the raw pointer stored in arg[0] (the panic payload).
|
||||
let scalar = this.read_immediate(args[0])?;
|
||||
assert!(this.machine.panic_payload.is_none(), "the panic runtime should avoid double-panics");
|
||||
this.machine.panic_payload = Some(scalar);
|
||||
|
Loading…
Reference in New Issue
Block a user