InterpResult, InterpError, InterpCx, StackPopCleanup, struct_error,
Scalar, Tag, Pointer, FnVal,
MemoryExtra, MiriMemoryKind, Evaluator, TlsEvalContextExt, HelpersEvalContextExt,
- ShimsEnvVars,
+ EnvVars,
};
/// Configuration needed to spawn a Miri instance.
Evaluator::new(config.communicate),
MemoryExtra::new(StdRng::seed_from_u64(config.seed.unwrap_or(0)), config.validate),
);
-
- ShimsEnvVars::init(config.communicate, &mut ecx, &tcx);
-
+ // Complete initialization.
+ EnvVars::init(&mut ecx, &tcx, config.communicate);
+ // Setup first stack-frame
let main_instance = ty::Instance::mono(ecx.tcx.tcx, main_id);
let main_mir = ecx.load_mir(main_instance.def)?;
pub use crate::shims::intrinsics::EvalContextExt as IntrinsicsEvalContextExt;
pub use crate::shims::tls::{EvalContextExt as TlsEvalContextExt, TlsData};
pub use crate::shims::dlsym::{Dlsym, EvalContextExt as DlsymEvalContextExt};
-pub use crate::shims::env::{EnvVars as ShimsEnvVars};
+pub use crate::shims::env::EnvVars;
pub use crate::operator::EvalContextExt as OperatorEvalContextExt;
pub use crate::range_map::RangeMap;
pub use crate::helpers::{EvalContextExt as HelpersEvalContextExt};
pub struct Evaluator<'tcx> {
/// Environment variables set by `setenv`.
/// Miri does not expose env vars from the host to the emulated program.
- pub(crate) env_vars: ShimsEnvVars,
+ pub(crate) env_vars: EnvVars,
/// Program arguments (`Option` because we can only initialize them after creating the ecx).
/// These are *pointers* to argc/argv because macOS.
Evaluator {
// `env_vars` could be initialized properly here if `Memory` were available before
// calling this method.
- env_vars: ShimsEnvVars::default(),
+ env_vars: EnvVars::default(),
argc: None,
argv: None,
cmd_line: None,
impl EnvVars {
pub(crate) fn init<'mir, 'tcx>(
- communicate: bool,
ecx: &mut InterpCx<'mir, 'tcx, Evaluator<'tcx>>,
tcx: &TyCtxt<'tcx>,
+ communicate: bool,
) {
if communicate {
for (name, value) in std::env::vars() {