mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-30 18:53:39 +00:00
remove Windows TERM env var hack and -Zmiri-env-exclude
This commit is contained in:
parent
4b9463c5b7
commit
bacf131acc
@ -288,14 +288,9 @@ environment variable. We first document the most relevant and most commonly used
|
|||||||
execution with a "permission denied" error being returned to the program.
|
execution with a "permission denied" error being returned to the program.
|
||||||
`warn` prints a full backtrace when that happens; `warn-nobacktrace` is less
|
`warn` prints a full backtrace when that happens; `warn-nobacktrace` is less
|
||||||
verbose. `hide` hides the warning entirely.
|
verbose. `hide` hides the warning entirely.
|
||||||
* `-Zmiri-env-exclude=<var>` keeps the `var` environment variable isolated from the host so that it
|
|
||||||
cannot be accessed by the program. Can be used multiple times to exclude several variables. The
|
|
||||||
`TERM` environment variable is excluded by default in Windows to prevent the libtest harness from
|
|
||||||
accessing the file system. This has no effect unless `-Zmiri-disable-isolation` is also set.
|
|
||||||
* `-Zmiri-env-forward=<var>` forwards the `var` environment variable to the interpreted program. Can
|
* `-Zmiri-env-forward=<var>` forwards the `var` environment variable to the interpreted program. Can
|
||||||
be used multiple times to forward several variables. This takes precedence over
|
be used multiple times to forward several variables. Execution will still be deterministic if the
|
||||||
`-Zmiri-env-exclude`: if a variable is both forwarded and exluced, it *will* get forwarded. This
|
value of forwarded variables stays the same. Has no effect if `-Zmiri-disable-isolation` is set.
|
||||||
means in particular `-Zmiri-env-forward=TERM` overwrites the default exclusion of `TERM`.
|
|
||||||
* `-Zmiri-ignore-leaks` disables the memory leak checker, and also allows some
|
* `-Zmiri-ignore-leaks` disables the memory leak checker, and also allows some
|
||||||
remaining threads to exist when the main thread exits.
|
remaining threads to exist when the main thread exits.
|
||||||
* `-Zmiri-permissive-provenance` disables the warning for integer-to-pointer casts and
|
* `-Zmiri-permissive-provenance` disables the warning for integer-to-pointer casts and
|
||||||
|
@ -441,8 +441,10 @@ fn main() {
|
|||||||
"-Zmiri-seed should only contain valid hex digits [0-9a-fA-F] and must fit into a u64 (max 16 characters)"
|
"-Zmiri-seed should only contain valid hex digits [0-9a-fA-F] and must fit into a u64 (max 16 characters)"
|
||||||
));
|
));
|
||||||
miri_config.seed = Some(seed);
|
miri_config.seed = Some(seed);
|
||||||
} else if let Some(param) = arg.strip_prefix("-Zmiri-env-exclude=") {
|
} else if let Some(_param) = arg.strip_prefix("-Zmiri-env-exclude=") {
|
||||||
miri_config.excluded_env_vars.push(param.to_owned());
|
show_error!(
|
||||||
|
"`-Zmiri-env-exclude` has been removed; unset env vars before starting Miri instead"
|
||||||
|
);
|
||||||
} else if let Some(param) = arg.strip_prefix("-Zmiri-env-forward=") {
|
} else if let Some(param) = arg.strip_prefix("-Zmiri-env-forward=") {
|
||||||
miri_config.forwarded_env_vars.push(param.to_owned());
|
miri_config.forwarded_env_vars.push(param.to_owned());
|
||||||
} else if let Some(param) = arg.strip_prefix("-Zmiri-track-pointer-tag=") {
|
} else if let Some(param) = arg.strip_prefix("-Zmiri-track-pointer-tag=") {
|
||||||
|
@ -74,7 +74,7 @@ pub enum BacktraceStyle {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct MiriConfig {
|
pub struct MiriConfig {
|
||||||
/// The host environment snapshot to use as basis for what is provided to the interpreted program.
|
/// The host environment snapshot to use as basis for what is provided to the interpreted program.
|
||||||
/// (This is still subject to isolation as well as `excluded_env_vars` and `forwarded_env_vars`.)
|
/// (This is still subject to isolation as well as `forwarded_env_vars`.)
|
||||||
pub env: Vec<(OsString, OsString)>,
|
pub env: Vec<(OsString, OsString)>,
|
||||||
/// Determine if validity checking is enabled.
|
/// Determine if validity checking is enabled.
|
||||||
pub validate: bool,
|
pub validate: bool,
|
||||||
@ -88,8 +88,6 @@ pub struct MiriConfig {
|
|||||||
pub isolated_op: IsolatedOp,
|
pub isolated_op: IsolatedOp,
|
||||||
/// Determines if memory leaks should be ignored.
|
/// Determines if memory leaks should be ignored.
|
||||||
pub ignore_leaks: bool,
|
pub ignore_leaks: bool,
|
||||||
/// Environment variables that should always be isolated from the host.
|
|
||||||
pub excluded_env_vars: Vec<String>,
|
|
||||||
/// Environment variables that should always be forwarded from the host.
|
/// Environment variables that should always be forwarded from the host.
|
||||||
pub forwarded_env_vars: Vec<String>,
|
pub forwarded_env_vars: Vec<String>,
|
||||||
/// Command-line arguments passed to the interpreted program.
|
/// Command-line arguments passed to the interpreted program.
|
||||||
@ -146,7 +144,6 @@ impl Default for MiriConfig {
|
|||||||
check_abi: true,
|
check_abi: true,
|
||||||
isolated_op: IsolatedOp::Reject(RejectOpWith::Abort),
|
isolated_op: IsolatedOp::Reject(RejectOpWith::Abort),
|
||||||
ignore_leaks: false,
|
ignore_leaks: false,
|
||||||
excluded_env_vars: vec![],
|
|
||||||
forwarded_env_vars: vec![],
|
forwarded_env_vars: vec![],
|
||||||
args: vec![],
|
args: vec![],
|
||||||
seed: None,
|
seed: None,
|
||||||
|
@ -42,19 +42,12 @@ impl<'tcx> EnvVars<'tcx> {
|
|||||||
config: &MiriConfig,
|
config: &MiriConfig,
|
||||||
) -> InterpResult<'tcx> {
|
) -> InterpResult<'tcx> {
|
||||||
let target_os = ecx.tcx.sess.target.os.as_ref();
|
let target_os = ecx.tcx.sess.target.os.as_ref();
|
||||||
let mut excluded_env_vars = config.excluded_env_vars.clone();
|
|
||||||
if target_os == "windows" {
|
|
||||||
// HACK: Exclude `TERM` var to avoid terminfo trying to open the termcap file.
|
|
||||||
excluded_env_vars.push("TERM".to_owned());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skip the loop entirely if we don't want to forward anything.
|
// Skip the loop entirely if we don't want to forward anything.
|
||||||
if ecx.machine.communicate() || !config.forwarded_env_vars.is_empty() {
|
if ecx.machine.communicate() || !config.forwarded_env_vars.is_empty() {
|
||||||
for (name, value) in &config.env {
|
for (name, value) in &config.env {
|
||||||
// Always forward what is in `forwarded_env_vars`; that list can take precedence over excluded_env_vars.
|
let forward = ecx.machine.communicate()
|
||||||
let forward = config.forwarded_env_vars.iter().any(|v| **v == *name)
|
|| config.forwarded_env_vars.iter().any(|v| **v == *name);
|
||||||
|| (ecx.machine.communicate()
|
|
||||||
&& !excluded_env_vars.iter().any(|v| **v == *name));
|
|
||||||
if forward {
|
if forward {
|
||||||
let var_ptr = match target_os {
|
let var_ptr = match target_os {
|
||||||
target if target_os_is_unix(target) =>
|
target if target_os_is_unix(target) =>
|
||||||
|
5
tests/pass/shims/env/var-exclude.rs
vendored
5
tests/pass/shims/env/var-exclude.rs
vendored
@ -1,5 +0,0 @@
|
|||||||
//@compile-flags: -Zmiri-disable-isolation -Zmiri-env-exclude=MIRI_ENV_VAR_TEST
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
assert!(std::env::var("MIRI_ENV_VAR_TEST").is_err());
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user