readme: move some things around
This commit is contained in:
parent
5c16713056
commit
4120425108
32
README.md
32
README.md
@ -289,6 +289,11 @@ environment variable. We first document the most relevant and most commonly used
|
|||||||
`-Zmiri-disable-isolation` is set.
|
`-Zmiri-disable-isolation` is set.
|
||||||
* `-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
|
||||||
|
[`ptr::from_exposed_addr`](https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html).
|
||||||
|
This will necessarily miss some bugs as those operations are not efficiently and accurately
|
||||||
|
implementable in a sanitizer, but it will only miss bugs that concern memory/pointers which is
|
||||||
|
subject to these operations.
|
||||||
* `-Zmiri-preemption-rate` configures the probability that at the end of a basic block, the active
|
* `-Zmiri-preemption-rate` configures the probability that at the end of a basic block, the active
|
||||||
thread will be preempted. The default is `0.01` (i.e., 1%). Setting this to `0` disables
|
thread will be preempted. The default is `0.01` (i.e., 1%). Setting this to `0` disables
|
||||||
preemption.
|
preemption.
|
||||||
@ -307,6 +312,16 @@ environment variable. We first document the most relevant and most commonly used
|
|||||||
provenance](https://github.com/rust-lang/rust/issues/95228) checking in Miri. This means that
|
provenance](https://github.com/rust-lang/rust/issues/95228) checking in Miri. This means that
|
||||||
casting an integer to a pointer yields a result with 'invalid' provenance, i.e., with provenance
|
casting an integer to a pointer yields a result with 'invalid' provenance, i.e., with provenance
|
||||||
that cannot be used for any memory access.
|
that cannot be used for any memory access.
|
||||||
|
* `-Zmiri-symbolic-alignment-check` makes the alignment check more strict. By default, alignment is
|
||||||
|
checked by casting the pointer to an integer, and making sure that is a multiple of the alignment.
|
||||||
|
This can lead to cases where a program passes the alignment check by pure chance, because things
|
||||||
|
"happened to be" sufficiently aligned -- there is no UB in this execution but there would be UB in
|
||||||
|
others. To avoid such cases, the symbolic alignment check only takes into account the requested
|
||||||
|
alignment of the relevant allocation, and the offset into that allocation. This avoids missing
|
||||||
|
such bugs, but it also incurs some false positives when the code does manual integer arithmetic to
|
||||||
|
ensure alignment. (The standard library `align_to` method works fine in both modes; under
|
||||||
|
symbolic alignment it only fills the middle slice when the allocation guarantees sufficient
|
||||||
|
alignment.)
|
||||||
|
|
||||||
The remaining flags are for advanced use only, and more likely to change or be removed.
|
The remaining flags are for advanced use only, and more likely to change or be removed.
|
||||||
Some of these are **unsound**, which means they can lead
|
Some of these are **unsound**, which means they can lead
|
||||||
@ -354,23 +369,6 @@ to Miri failing to detect cases of undefined behavior in a program.
|
|||||||
application instead of raising an error within the context of Miri (and halting
|
application instead of raising an error within the context of Miri (and halting
|
||||||
execution). Note that code might not expect these operations to ever panic, so
|
execution). Note that code might not expect these operations to ever panic, so
|
||||||
this flag can lead to strange (mis)behavior.
|
this flag can lead to strange (mis)behavior.
|
||||||
* `-Zmiri-permissive-provenance` disables the warning for integer-to-pointer casts and
|
|
||||||
[`ptr::from_exposed_addr`](https://doc.rust-lang.org/nightly/std/ptr/fn.from_exposed_addr.html).
|
|
||||||
This will necessarily miss some bugs as those operations are not efficiently and accurately
|
|
||||||
implementable in a sanitizer, but it will only miss bugs that concern memory/pointers which is
|
|
||||||
subject to these operations.
|
|
||||||
* `-Zmiri-symbolic-alignment-check` makes the alignment check more strict. By
|
|
||||||
default, alignment is checked by casting the pointer to an integer, and making
|
|
||||||
sure that is a multiple of the alignment. This can lead to cases where a
|
|
||||||
program passes the alignment check by pure chance, because things "happened to
|
|
||||||
be" sufficiently aligned -- there is no UB in this execution but there would
|
|
||||||
be UB in others. To avoid such cases, the symbolic alignment check only takes
|
|
||||||
into account the requested alignment of the relevant allocation, and the
|
|
||||||
offset into that allocation. This avoids missing such bugs, but it also
|
|
||||||
incurs some false positives when the code does manual integer arithmetic to
|
|
||||||
ensure alignment. (The standard library `align_to` method works fine in both
|
|
||||||
modes; under symbolic alignment it only fills the middle slice when the
|
|
||||||
allocation guarantees sufficient alignment.)
|
|
||||||
* `-Zmiri-track-alloc-id=<id1>,<id2>,...` shows a backtrace when the given allocations are
|
* `-Zmiri-track-alloc-id=<id1>,<id2>,...` shows a backtrace when the given allocations are
|
||||||
being allocated or freed. This helps in debugging memory leaks and
|
being allocated or freed. This helps in debugging memory leaks and
|
||||||
use after free bugs. Specifying this argument multiple times does not overwrite the previous
|
use after free bugs. Specifying this argument multiple times does not overwrite the previous
|
||||||
|
Loading…
x
Reference in New Issue
Block a user