update comments
This commit is contained in:
parent
93ee180cfa
commit
3f6ffa1462
1 changed files with 11 additions and 13 deletions
|
@ -108,21 +108,19 @@ impl Stability {
|
|||
// per-function level, since we would then allow safe calls from functions with `+soft-float` to
|
||||
// functions without that feature!
|
||||
//
|
||||
// It is important for soundness that features allowed here do *not* change the function call ABI.
|
||||
// For example, disabling the `x87` feature on x86 changes how scalar floats are passed as
|
||||
// arguments, so enabling toggling that feature would be unsound. In fact, since `-Ctarget-feature`
|
||||
// will just allow unknown features (with a warning), we have to explicitly list features that change
|
||||
// the ABI as `Forbidden` to ensure using them causes an error. Note that this is only effective if
|
||||
// such features can never be toggled via `-Ctarget-cpu`! If that is ever a possibility, we will need
|
||||
// extra checks ensuring that the LLVM-computed target features for a CPU did not (un)set a
|
||||
// `Forbidden` feature. See https://github.com/rust-lang/rust/issues/116344 for some more context.
|
||||
// FIXME: add such "forbidden" features for non-x86 targets.
|
||||
// It is important for soundness to consider the interaction of targets features and the function
|
||||
// call ABI. For example, disabling the `x87` feature on x86 changes how scalar floats are passed as
|
||||
// arguments, so letting people toggle that feature would be unsound. To this end, the
|
||||
// `abi_required_features` function computes which target features must and must not be enabled for
|
||||
// any given target, and individual features can also be marked as `Forbidden`.
|
||||
// See https://github.com/rust-lang/rust/issues/116344 for some more context.
|
||||
//
|
||||
// The one exception to features that change the ABI is features that enable larger vector
|
||||
// registers. Those are permitted to be listed here. This is currently unsound (see
|
||||
// https://github.com/rust-lang/rust/issues/116558); in the future we will have to ensure that
|
||||
// functions can only use such vectors as arguments/return types if the corresponding target feature
|
||||
// is enabled.
|
||||
// registers. Those are permitted to be listed here. The `*_FOR_CORRECT_VECTOR_ABI` arrays store
|
||||
// information about which target feature is ABI-required for which vector size; this is used to
|
||||
// ensure that vectors can only be passed via `extern "C"` when the right feature is enabled. (For
|
||||
// the "Rust" ABI we generally pass vectors by-ref exactly to avoid these issues.)
|
||||
// Also see https://github.com/rust-lang/rust/issues/116558.
|
||||
//
|
||||
// Stabilizing a target feature requires t-lang approval.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue