Skip to content

Commit ee54cfc

Browse files
committed
compiletest: load supported sanitizers from target spec
1 parent 5ede940 commit ee54cfc

File tree

3 files changed

+31
-96
lines changed

3 files changed

+31
-96
lines changed

Diff for: src/tools/compiletest/src/common.rs

+18
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,22 @@ impl PanicStrategy {
141141
}
142142
}
143143

144+
#[derive(Clone, Debug, PartialEq, serde::Deserialize)]
145+
#[serde(rename_all = "kebab-case")]
146+
pub enum Sanitizer {
147+
Address,
148+
Cfi,
149+
Kcfi,
150+
KernelAddress,
151+
Leak,
152+
Memory,
153+
Memtag,
154+
Safestack,
155+
ShadowCallStack,
156+
Thread,
157+
Hwaddress,
158+
}
159+
144160
/// Configuration for compiletest
145161
#[derive(Debug, Default, Clone)]
146162
pub struct Config {
@@ -560,6 +576,8 @@ pub struct TargetCfg {
560576
pub(crate) panic: PanicStrategy,
561577
#[serde(default)]
562578
pub(crate) dynamic_linking: bool,
579+
#[serde(rename = "supported-sanitizers", default)]
580+
pub(crate) sanitizers: Vec<Sanitizer>,
563581
}
564582

565583
impl TargetCfg {

Diff for: src/tools/compiletest/src/header/needs.rs

+13-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::common::{Config, Debugger};
1+
use crate::common::{Config, Debugger, Sanitizer};
22
use crate::header::IgnoreDecision;
33
use crate::util;
44

@@ -220,19 +220,20 @@ impl CachedNeedsConditions {
220220
path.iter().any(|dir| dir.join("x86_64-w64-mingw32-dlltool").is_file());
221221

222222
let target = &&*config.target;
223+
let sanitizers = &config.target_cfg().sanitizers;
223224
Self {
224225
sanitizer_support: std::env::var_os("RUSTC_SANITIZER_SUPPORT").is_some(),
225-
sanitizer_address: util::ASAN_SUPPORTED_TARGETS.contains(target),
226-
sanitizer_cfi: util::CFI_SUPPORTED_TARGETS.contains(target),
227-
sanitizer_kcfi: util::KCFI_SUPPORTED_TARGETS.contains(target),
228-
sanitizer_kasan: util::KASAN_SUPPORTED_TARGETS.contains(target),
229-
sanitizer_leak: util::LSAN_SUPPORTED_TARGETS.contains(target),
230-
sanitizer_memory: util::MSAN_SUPPORTED_TARGETS.contains(target),
231-
sanitizer_thread: util::TSAN_SUPPORTED_TARGETS.contains(target),
232-
sanitizer_hwaddress: util::HWASAN_SUPPORTED_TARGETS.contains(target),
233-
sanitizer_memtag: util::MEMTAG_SUPPORTED_TARGETS.contains(target),
234-
sanitizer_shadow_call_stack: util::SHADOWCALLSTACK_SUPPORTED_TARGETS.contains(target),
235-
sanitizer_safestack: util::SAFESTACK_SUPPORTED_TARGETS.contains(target),
226+
sanitizer_address: sanitizers.contains(&Sanitizer::Address),
227+
sanitizer_cfi: sanitizers.contains(&Sanitizer::Cfi),
228+
sanitizer_kcfi: sanitizers.contains(&Sanitizer::Kcfi),
229+
sanitizer_kasan: sanitizers.contains(&Sanitizer::KernelAddress),
230+
sanitizer_leak: sanitizers.contains(&Sanitizer::Leak),
231+
sanitizer_memory: sanitizers.contains(&Sanitizer::Memory),
232+
sanitizer_thread: sanitizers.contains(&Sanitizer::Thread),
233+
sanitizer_hwaddress: sanitizers.contains(&Sanitizer::Hwaddress),
234+
sanitizer_memtag: sanitizers.contains(&Sanitizer::Memtag),
235+
sanitizer_shadow_call_stack: sanitizers.contains(&Sanitizer::ShadowCallStack),
236+
sanitizer_safestack: sanitizers.contains(&Sanitizer::Safestack),
236237
profiler_support: std::env::var_os("RUSTC_PROFILER_SUPPORT").is_some(),
237238
xray: util::XRAY_SUPPORTED_TARGETS.contains(target),
238239

Diff for: src/tools/compiletest/src/util.rs

-84
Original file line numberDiff line numberDiff line change
@@ -9,88 +9,6 @@ use tracing::*;
99
#[cfg(test)]
1010
mod tests;
1111

12-
pub const ASAN_SUPPORTED_TARGETS: &[&str] = &[
13-
"aarch64-apple-darwin",
14-
"aarch64-apple-ios",
15-
"aarch64-apple-ios-sim",
16-
"aarch64-unknown-fuchsia",
17-
"aarch64-linux-android",
18-
"aarch64-unknown-linux-gnu",
19-
"arm-linux-androideabi",
20-
"armv7-linux-androideabi",
21-
"i686-linux-android",
22-
"i686-unknown-linux-gnu",
23-
"x86_64-apple-darwin",
24-
"x86_64-apple-ios",
25-
"x86_64-unknown-fuchsia",
26-
"x86_64-linux-android",
27-
"x86_64-unknown-freebsd",
28-
"x86_64-unknown-linux-gnu",
29-
"s390x-unknown-linux-gnu",
30-
];
31-
32-
// FIXME(rcvalle): More targets are likely supported.
33-
pub const CFI_SUPPORTED_TARGETS: &[&str] = &[
34-
"aarch64-apple-darwin",
35-
"aarch64-unknown-fuchsia",
36-
"aarch64-linux-android",
37-
"aarch64-unknown-freebsd",
38-
"aarch64-unknown-linux-gnu",
39-
"x86_64-apple-darwin",
40-
"x86_64-unknown-fuchsia",
41-
"x86_64-pc-solaris",
42-
"x86_64-unknown-freebsd",
43-
"x86_64-unknown-illumos",
44-
"x86_64-unknown-linux-gnu",
45-
"x86_64-unknown-linux-musl",
46-
"x86_64-unknown-netbsd",
47-
];
48-
49-
pub const KCFI_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-none", "x86_64-linux-none"];
50-
51-
pub const KASAN_SUPPORTED_TARGETS: &[&str] = &[
52-
"aarch64-unknown-none",
53-
"riscv64gc-unknown-none-elf",
54-
"riscv64imac-unknown-none-elf",
55-
"x86_64-unknown-none",
56-
];
57-
58-
pub const LSAN_SUPPORTED_TARGETS: &[&str] = &[
59-
// FIXME: currently broken, see #88132
60-
// "aarch64-apple-darwin",
61-
"aarch64-unknown-linux-gnu",
62-
"x86_64-apple-darwin",
63-
"x86_64-unknown-linux-gnu",
64-
"s390x-unknown-linux-gnu",
65-
];
66-
67-
pub const MSAN_SUPPORTED_TARGETS: &[&str] = &[
68-
"aarch64-unknown-linux-gnu",
69-
"x86_64-unknown-freebsd",
70-
"x86_64-unknown-linux-gnu",
71-
"s390x-unknown-linux-gnu",
72-
];
73-
74-
pub const TSAN_SUPPORTED_TARGETS: &[&str] = &[
75-
"aarch64-apple-darwin",
76-
"aarch64-apple-ios",
77-
"aarch64-apple-ios-sim",
78-
"aarch64-unknown-linux-gnu",
79-
"x86_64-apple-darwin",
80-
"x86_64-apple-ios",
81-
"x86_64-unknown-freebsd",
82-
"x86_64-unknown-linux-gnu",
83-
"s390x-unknown-linux-gnu",
84-
];
85-
86-
pub const HWASAN_SUPPORTED_TARGETS: &[&str] =
87-
&["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
88-
89-
pub const MEMTAG_SUPPORTED_TARGETS: &[&str] =
90-
&["aarch64-linux-android", "aarch64-unknown-linux-gnu"];
91-
92-
pub const SHADOWCALLSTACK_SUPPORTED_TARGETS: &[&str] = &["aarch64-linux-android"];
93-
9412
pub const XRAY_SUPPORTED_TARGETS: &[&str] = &[
9513
"aarch64-linux-android",
9614
"aarch64-unknown-linux-gnu",
@@ -104,8 +22,6 @@ pub const XRAY_SUPPORTED_TARGETS: &[&str] = &[
10422
"x86_64-unknown-openbsd",
10523
];
10624

107-
pub const SAFESTACK_SUPPORTED_TARGETS: &[&str] = &["x86_64-unknown-linux-gnu"];
108-
10925
pub fn make_new_path(path: &str) -> String {
11026
assert!(cfg!(windows));
11127
// Windows just uses PATH as the library search path, so we have to

0 commit comments

Comments
 (0)