Rollup merge of #123200 - maurer:kcfi-abort, r=compiler-errors
KCFI: Require -C panic=abort While the KCFI scheme is not incompatible with unwinding, LLVM's `invoke` instruction does not currently support KCFI bundles. While it likely will in the near future, we won't be able to assume that in Rust for a while. We encountered this problem while [turning on closure support](https://github.com/rust-lang/rust/pull/123106#issuecomment-2027436640). r? ``@workingjubilee``
This commit is contained in:
commit
3afd111489
8 changed files with 16 additions and 0 deletions
|
@ -145,6 +145,10 @@ pub(crate) struct SanitizerCfiGeneralizePointersRequiresCfi;
|
|||
#[diag(session_sanitizer_cfi_normalize_integers_requires_cfi)]
|
||||
pub(crate) struct SanitizerCfiNormalizeIntegersRequiresCfi;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(session_sanitizer_kcfi_requires_panic_abort)]
|
||||
pub(crate) struct SanitizerKcfiRequiresPanicAbort;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(session_split_lto_unit_requires_lto)]
|
||||
pub(crate) struct SplitLtoUnitRequiresLto;
|
||||
|
|
|
@ -1211,6 +1211,11 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
|
|||
sess.dcx().emit_err(errors::SanitizerCfiRequiresLto);
|
||||
}
|
||||
|
||||
// KCFI requires panic=abort
|
||||
if sess.is_sanitizer_kcfi_enabled() && sess.panic_strategy() != PanicStrategy::Abort {
|
||||
sess.dcx().emit_err(errors::SanitizerKcfiRequiresPanicAbort);
|
||||
}
|
||||
|
||||
// LLVM CFI using rustc LTO requires a single codegen unit.
|
||||
if sess.is_sanitizer_cfi_enabled()
|
||||
&& sess.lto() == config::Lto::Fat
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue