mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-26 13:01:27 +03:00
Create x86_64-unknown-linux-gnu{m,t}san target which enables {M,T}SAN by default
Similar like we've done it for `x86_64-unknown-linux-gnuasan`, in order to distribute sanitizer instrumented standard libraries without introducing new rustc flags, this adds a new dedicated target. With the target, we can distribute the instrumented standard libraries through a separate rustup component.
This commit is contained in:
@@ -1815,6 +1815,8 @@ fn $module() {
|
||||
("x86_64-pc-cygwin", x86_64_pc_cygwin),
|
||||
|
||||
("x86_64-unknown-linux-gnuasan", x86_64_unknown_linux_gnuasan),
|
||||
("x86_64-unknown-linux-gnumsan", x86_64_unknown_linux_gnumsan),
|
||||
("x86_64-unknown-linux-gnutsan", x86_64_unknown_linux_gnutsan),
|
||||
}
|
||||
|
||||
/// Cow-Vec-Str: Cow<'static, [Cow<'static, str>]>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = super::x86_64_unknown_linux_gnu::target();
|
||||
base.metadata = TargetMetadata {
|
||||
description: Some(
|
||||
"64-bit Linux (kernel 3.2+, glibc 2.17+) with MSAN enabled by default".into(),
|
||||
),
|
||||
tier: Some(2),
|
||||
host_tools: Some(false),
|
||||
std: Some(true),
|
||||
};
|
||||
base.supported_sanitizers = SanitizerSet::MEMORY;
|
||||
base.default_sanitizers = SanitizerSet::MEMORY;
|
||||
base
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
use crate::spec::{SanitizerSet, Target, TargetMetadata};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = super::x86_64_unknown_linux_gnu::target();
|
||||
base.metadata = TargetMetadata {
|
||||
description: Some(
|
||||
"64-bit Linux (kernel 3.2+, glibc 2.17+) with TSAN enabled by default".into(),
|
||||
),
|
||||
tier: Some(2),
|
||||
host_tools: Some(false),
|
||||
std: Some(true),
|
||||
};
|
||||
base.supported_sanitizers = SanitizerSet::THREAD;
|
||||
base.default_sanitizers = SanitizerSet::THREAD;
|
||||
base
|
||||
}
|
||||
@@ -1552,6 +1552,8 @@ fn supported_sanitizers(
|
||||
&["asan", "dfsan", "lsan", "msan", "safestack", "tsan", "rtsan"],
|
||||
),
|
||||
"x86_64-unknown-linux-gnuasan" => common_libs("linux", "x86_64", &["asan"]),
|
||||
"x86_64-unknown-linux-gnumsan" => common_libs("linux", "x86_64", &["msan"]),
|
||||
"x86_64-unknown-linux-gnutsan" => common_libs("linux", "x86_64", &["tsan"]),
|
||||
"x86_64-unknown-linux-musl" => {
|
||||
common_libs("linux", "x86_64", &["asan", "lsan", "msan", "tsan"])
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ pub struct Finder {
|
||||
/// when the newly-bumped stage 0 compiler now knows about the formerly-missing targets.
|
||||
const STAGE0_MISSING_TARGETS: &[&str] = &[
|
||||
// just a dummy comment so the list doesn't get onelined
|
||||
"x86_64-unknown-linux-gnumsan",
|
||||
"x86_64-unknown-linux-gnutsan",
|
||||
];
|
||||
|
||||
/// Minimum version threshold for libstdc++ required when using prebuilt LLVM
|
||||
|
||||
@@ -126,6 +126,8 @@ ENV TARGETS=$TARGETS,x86_64-unknown-uefi
|
||||
ENV TARGETS=$TARGETS,riscv64gc-unknown-linux-musl
|
||||
|
||||
ENV TARGETS_SANITIZERS=x86_64-unknown-linux-gnuasan
|
||||
ENV TARGETS_SANITIZERS=$TARGETS_SANITIZERS,x86_64-unknown-linux-gnumsan
|
||||
ENV TARGETS_SANITIZERS=$TARGETS_SANITIZERS,x86_64-unknown-linux-gnutsan
|
||||
|
||||
# As per https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211
|
||||
# we need asm in the search path for gcc-9 (for gnux32) but not in the search path of the
|
||||
|
||||
@@ -155,5 +155,7 @@
|
||||
- [x86_64-unknown-linux-none](platform-support/x86_64-unknown-linux-none.md)
|
||||
- [x86_64-unknown-none](platform-support/x86_64-unknown-none.md)
|
||||
- [x86_64-unknown-linux-gnuasan](platform-support/x86_64-unknown-linux-gnuasan.md)
|
||||
- [x86_64-unknown-linux-gnumsan](platform-support/x86_64-unknown-linux-gnumsan.md)
|
||||
- [x86_64-unknown-linux-gnutsan](platform-support/x86_64-unknown-linux-gnutsan.md)
|
||||
- [xtensa-\*-none-elf](platform-support/xtensa.md)
|
||||
- [\*-nuttx-\*](platform-support/nuttx.md)
|
||||
|
||||
@@ -216,6 +216,8 @@ target | std | notes
|
||||
[`x86_64-fortanix-unknown-sgx`](platform-support/x86_64-fortanix-unknown-sgx.md) | ✓ | [Fortanix ABI] for 64-bit Intel SGX
|
||||
[`x86_64-linux-android`](platform-support/android.md) | ✓ | 64-bit x86 Android
|
||||
[`x86_64-unknown-linux-gnuasan`](platform-support/x86_64-unknown-linux-gnuasan.md) | ✓ | 64-bit Linux (kernel 3.2+, glibc 2.17+) with ASAN enabled by default
|
||||
[`x86_64-unknown-linux-gnumsan`](platform-support/x86_64-unknown-linux-gnumsan.md) | ✓ | 64-bit Linux (kernel 3.2+, glibc 2.17+) with MSAN enabled by default
|
||||
[`x86_64-unknown-linux-gnutsan`](platform-support/x86_64-unknown-linux-gnutsan.md) | ✓ | 64-bit Linux (kernel 3.2+, glibc 2.17+) with TSAN enabled by default
|
||||
[`x86_64-unknown-fuchsia`](platform-support/fuchsia.md) | ✓ | 64-bit x86 Fuchsia
|
||||
`x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15+, glibc 2.27)
|
||||
[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | Freestanding/bare-metal x86_64, softfloat
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# `x86_64-unknown-linux-gnumsan`
|
||||
|
||||
**Tier: 2**
|
||||
|
||||
Target mirroring `x86_64-unknown-linux-gnu` with MemorySanitizer enabled by
|
||||
default.
|
||||
The goal of this target is to allow shipping MSAN-instrumented standard
|
||||
libraries through rustup, enabling a fully instrumented binary without requiring
|
||||
nightly features (build-std).
|
||||
Once build-std stabilizes, this target is no longer needed and will be removed.
|
||||
|
||||
## Target maintainers
|
||||
|
||||
- [@jakos-sec](https://github.com/jakos-sec)
|
||||
- [@1c3t3a](https://github.com/1c3t3a)
|
||||
- [@rust-lang/project-exploit-mitigations][project-exploit-mitigations]
|
||||
|
||||
## Requirements
|
||||
|
||||
The target is for cross-compilation only. Host tools are not supported, since
|
||||
there is no need to have the host tools instrumented with MSAN. std is fully
|
||||
supported.
|
||||
|
||||
In all other aspects the target is equivalent to `x86_64-unknown-linux-gnu`.
|
||||
|
||||
## Building the target
|
||||
|
||||
The target can be built by enabling it for a rustc build:
|
||||
|
||||
```toml
|
||||
[build]
|
||||
target = ["x86_64-unknown-linux-gnumsan"]
|
||||
```
|
||||
|
||||
## Building Rust programs
|
||||
|
||||
Rust programs can be compiled by adding this target via rustup:
|
||||
|
||||
```sh
|
||||
$ rustup target add x86_64-unknown-linux-gnumsan
|
||||
```
|
||||
|
||||
and then compiling with the target:
|
||||
|
||||
```sh
|
||||
$ rustc foo.rs --target x86_64-unknown-linux-gnumsan
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Created binaries will run on Linux without any external requirements.
|
||||
|
||||
## Cross-compilation toolchains and C code
|
||||
|
||||
The target supports C code and should use the same toolchain target as
|
||||
`x86_64-unknown-linux-gnu`.
|
||||
@@ -0,0 +1,56 @@
|
||||
# `x86_64-unknown-linux-gnutsan`
|
||||
|
||||
**Tier: 2**
|
||||
|
||||
Target mirroring `x86_64-unknown-linux-gnu` with ThreadSanitizer enabled by
|
||||
default.
|
||||
The goal of this target is to allow shipping TSAN-instrumented standard
|
||||
libraries through rustup, enabling a fully instrumented binary without requiring
|
||||
nightly features (build-std).
|
||||
Once build-std stabilizes, this target is no longer needed and will be removed.
|
||||
|
||||
## Target maintainers
|
||||
|
||||
- [@jakos-sec](https://github.com/jakos-sec)
|
||||
- [@1c3t3a](https://github.com/1c3t3a)
|
||||
- [@rust-lang/project-exploit-mitigations][project-exploit-mitigations]
|
||||
|
||||
## Requirements
|
||||
|
||||
The target is for cross-compilation only. Host tools are not supported, since
|
||||
there is no need to have the host tools instrumented with TSAN. std is fully
|
||||
supported.
|
||||
|
||||
In all other aspects the target is equivalent to `x86_64-unknown-linux-gnu`.
|
||||
|
||||
## Building the target
|
||||
|
||||
The target can be built by enabling it for a rustc build:
|
||||
|
||||
```toml
|
||||
[build]
|
||||
target = ["x86_64-unknown-linux-gnutsan"]
|
||||
```
|
||||
|
||||
## Building Rust programs
|
||||
|
||||
Rust programs can be compiled by adding this target via rustup:
|
||||
|
||||
```sh
|
||||
$ rustup target add x86_64-unknown-linux-gnutsan
|
||||
```
|
||||
|
||||
and then compiling with the target:
|
||||
|
||||
```sh
|
||||
$ rustc foo.rs --target x86_64-unknown-linux-gnutsan
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Created binaries will run on Linux without any external requirements.
|
||||
|
||||
## Cross-compilation toolchains and C code
|
||||
|
||||
The target supports C code and should use the same toolchain target as
|
||||
`x86_64-unknown-linux-gnu`.
|
||||
@@ -709,6 +709,12 @@
|
||||
//@ revisions: x86_64_unknown_linux_gnuasan
|
||||
//@ [x86_64_unknown_linux_gnuasan] compile-flags: --target x86_64-unknown-linux-gnuasan
|
||||
//@ [x86_64_unknown_linux_gnuasan] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_unknown_linux_gnumsan
|
||||
//@ [x86_64_unknown_linux_gnumsan] compile-flags: --target x86_64-unknown-linux-gnumsan
|
||||
//@ [x86_64_unknown_linux_gnumsan] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_unknown_linux_gnutsan
|
||||
//@ [x86_64_unknown_linux_gnutsan] compile-flags: --target x86_64-unknown-linux-gnutsan
|
||||
//@ [x86_64_unknown_linux_gnutsan] needs-llvm-components: x86
|
||||
//@ revisions: x86_64_unknown_linux_musl
|
||||
//@ [x86_64_unknown_linux_musl] compile-flags: --target x86_64-unknown-linux-musl
|
||||
//@ [x86_64_unknown_linux_musl] needs-llvm-components: x86
|
||||
|
||||
Reference in New Issue
Block a user