Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3afd111

Browse files
Rollup merge of rust-lang#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](rust-lang#123106 (comment)). r? ``@workingjubilee``
2 parents 93f1443 + 29c1a2b commit 3afd111

File tree

8 files changed

+16
-0
lines changed

8 files changed

+16
-0
lines changed

‎compiler/rustc_session/messages.ftl‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ session_sanitizer_cfi_requires_lto = `-Zsanitizer=cfi` requires `-Clto` or `-Cli
9696
9797
session_sanitizer_cfi_requires_single_codegen_unit = `-Zsanitizer=cfi` with `-Clto` requires `-Ccodegen-units=1`
9898
99+
session_sanitizer_kcfi_requires_panic_abort = `-Z sanitizer=kcfi` requires `-C panic=abort`
100+
99101
session_sanitizer_not_supported = {$us} sanitizer is not supported for this target
100102
101103
session_sanitizers_not_supported = {$us} sanitizers are not supported for this target

‎compiler/rustc_session/src/errors.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ pub(crate) struct SanitizerCfiGeneralizePointersRequiresCfi;
145145
#[diag(session_sanitizer_cfi_normalize_integers_requires_cfi)]
146146
pub(crate) struct SanitizerCfiNormalizeIntegersRequiresCfi;
147147

148+
#[derive(Diagnostic)]
149+
#[diag(session_sanitizer_kcfi_requires_panic_abort)]
150+
pub(crate) struct SanitizerKcfiRequiresPanicAbort;
151+
148152
#[derive(Diagnostic)]
149153
#[diag(session_split_lto_unit_requires_lto)]
150154
pub(crate) struct SplitLtoUnitRequiresLto;

‎compiler/rustc_session/src/session.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,6 +1211,11 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
12111211
sess.dcx().emit_err(errors::SanitizerCfiRequiresLto);
12121212
}
12131213

1214+
// KCFI requires panic=abort
1215+
if sess.is_sanitizer_kcfi_enabled() && sess.panic_strategy() != PanicStrategy::Abort {
1216+
sess.dcx().emit_err(errors::SanitizerKcfiRequiresPanicAbort);
1217+
}
1218+
12141219
// LLVM CFI using rustc LTO requires a single codegen unit.
12151220
if sess.is_sanitizer_cfi_enabled()
12161221
&& sess.lto() == config::Lto::Fat

‎tests/ui/sanitizer/cfg.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//@[cfi]compile-flags: -Clto -Ccodegen-units=1
1212
//@[kcfi]needs-llvm-components: x86
1313
//@[kcfi]compile-flags: -Zsanitizer=kcfi --cfg kcfi --target x86_64-unknown-none
14+
//@[kcfi]compile-flags: -C panic=abort
1415
//@[leak]needs-sanitizer-leak
1516
//@[leak]compile-flags: -Zsanitizer=leak --cfg leak
1617
//@[memory]needs-sanitizer-memory

‎tests/ui/sanitizer/cfi-closure-fn-ptr-cast.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
//@ [cfi] compile-flags: -C codegen-units=1 -C lto -C prefer-dynamic=off -C opt-level=0
1515
//@ [cfi] compile-flags: -Z sanitizer=cfi
1616
//@ [kcfi] compile-flags: -Z sanitizer=kcfi
17+
//@ [kcfi] compile-flags: -C panic=abort -C prefer-dynamic=off
1718
//@ run-pass
1819

1920
pub fn main() {

‎tests/ui/sanitizer/cfi-complex-receiver.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
//@ [cfi] compile-flags: -C codegen-units=1 -C lto -C prefer-dynamic=off -C opt-level=0
1212
//@ [cfi] compile-flags: -Z sanitizer=cfi
1313
//@ [kcfi] compile-flags: -Z sanitizer=kcfi
14+
//@ [kcfi] compile-flags: -C panic=abort -C prefer-dynamic=off
1415
//@ run-pass
1516

1617
use std::sync::Arc;

‎tests/ui/sanitizer/cfi-self-ref.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//@ [cfi] compile-flags: -C codegen-units=1 -C lto -C prefer-dynamic=off -C opt-level=0
1010
//@ [cfi] compile-flags: -Z sanitizer=cfi
1111
//@ [kcfi] compile-flags: -Z sanitizer=kcfi
12+
//@ [kcfi] compile-flags: -C panic=abort -C prefer-dynamic=off
1213
//@ run-pass
1314

1415
use std::marker::PhantomData;

‎tests/ui/sanitizer/cfi-virtual-auto.rs‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
//@ [cfi] compile-flags: -C codegen-units=1 -C lto -C prefer-dynamic=off -C opt-level=0
1010
//@ [cfi] compile-flags: -Z sanitizer=cfi
1111
//@ [kcfi] compile-flags: -Z sanitizer=kcfi
12+
//@ [kcfi] compile-flags: -C panic=abort -C prefer-dynamic=off
1213
//@ run-pass
1314

1415
trait Foo {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /