Skip to content

Commit 48aaf67

Browse files
committed
tweak flag section in README
1 parent 0ad1114 commit 48aaf67

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

README.md

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -160,45 +160,51 @@ up the sysroot. If you are using `miri` (the Miri driver) directly, see
160160
## Miri `-Z` flags and environment variables
161161
[miri-flags]: #miri--z-flags-and-environment-variables
162162

163-
Several `-Z` flags are relevant for Miri:
164-
165-
* `-Zmiri-seed=<hex>` is a custom `-Z` flag added by Miri. It configures the
166-
seed of the RNG that Miri uses to resolve non-determinism. This RNG is used
167-
to pick base addresses for allocations. When isolation is enabled (the default),
168-
this is also used to emulate system entropy. The default seed is 0.
169-
**NOTE**: This entropy is not good enough for cryptographic use! Do not
170-
generate secret keys in Miri or perform other kinds of cryptographic
171-
operations that rely on proper random numbers.
172-
* `-Zmiri-disable-validation` disables enforcing validity invariants, which are
173-
enforced by default. This is mostly useful for debugging. It means Miri will
174-
miss bugs in your program. However, this can also help to make Miri run
175-
faster.
163+
Miri adds its own set of `-Z` flags:
164+
165+
* `-Zmiri-disable-alignment-check` disables checking pointer alignment. This is
166+
useful to avoid [false positives][alignment-false-positives]. However, setting
167+
this flag means Miri could miss bugs in your program.
176168
* `-Zmiri-disable-stacked-borrows` disables checking the experimental
177169
[Stacked Borrows] aliasing rules. This can make Miri run faster, but it also
178170
means no aliasing violations will be detected.
179-
* `-Zmiri-disable-alignment-check` disables checking pointer alignment on memory
180-
accesses.
171+
* `-Zmiri-disable-validation` disables enforcing validity invariants, which are
172+
enforced by default. This is mostly useful to focus on other failures (such
173+
as out-of-bounds accesses) first. Setting this flag means Miri will miss bugs
174+
in your program. However, this can also help to make Miri run faster.
181175
* `-Zmiri-disable-isolation` disables host isolation. As a consequence,
182176
the program has access to host resources such as environment variables, file
183177
systems, and randomness.
184-
* `-Zmiri-ignore-leaks` disables the memory leak checker.
185178
* `-Zmiri-env-exclude=<var>` keeps the `var` environment variable isolated from
186-
the host. Can be used multiple times to exclude several variables. The `TERM`
187-
environment variable is excluded by default.
179+
the host so that it cannot be accessed by the program. Can be used multiple
180+
times to exclude several variables. On Windows, the `TERM` environment
181+
variable is excluded by default.
182+
* `-Zmiri-ignore-leaks` disables the memory leak checker.
183+
* `-Zmiri-seed=<hex>` configures the seed of the RNG that Miri uses to resolve
184+
non-determinism. This RNG is used to pick base addresses for allocations.
185+
When isolation is enabled (the default), this is also used to emulate system
186+
entropy. The default seed is 0. **NOTE**: This entropy is not good enough
187+
for cryptographic use! Do not generate secret keys in Miri or perform other
188+
kinds of cryptographic operations that rely on proper random numbers.
189+
* `-Zmiri-track-alloc-id=<id>` shows a backtrace when the given allocation is
190+
being allocated. This helps in debugging memory leaks.
191+
* `-Zmiri-track-pointer-tag=<tag>` shows a backtrace when the given pointer tag
192+
is popped from a borrow stack (which is where the tag becomes invalid and any
193+
future use of it will error). This helps you in finding out why UB is
194+
happening and where in your code would be a good place to look for it.
195+
196+
[alignment-false-positives]: https://github.com/rust-lang/miri/issues/1074
197+
198+
Some native rustc `-Z` flags are also very relevant for Miri:
199+
188200
* `-Zmir-opt-level` controls how many MIR optimizations are performed. Miri
189201
overrides the default to be `0`; be advised that using any higher level can
190202
make Miri miss bugs in your program because they got optimized away.
191203
* `-Zalways-encode-mir` makes rustc dump MIR even for completely monomorphic
192204
functions. This is needed so that Miri can execute such functions, so Miri
193205
sets this flag per default.
194206
* `-Zmir-emit-retag` controls whether `Retag` statements are emitted. Miri
195-
enables this per default because it is needed for validation.
196-
* `-Zmiri-track-pointer-tag=<tag>` shows a backtrace when the given pointer tag
197-
is popped from a borrow stack (which is where the tag becomes invalid and any
198-
future use of it will error). This helps you in finding out why UB is
199-
happening and where in your code would be a good place to look for it.
200-
* `-Zmiri-track-alloc-id=<id>` shows a backtrace when the given allocation is
201-
being allocated. This helps in debugging memory leaks.
207+
enables this per default because it is needed for [Stacked Borrows].
202208

203209
Moreover, Miri recognizes some environment variables:
204210

0 commit comments

Comments
 (0)