Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions compiler/rustc_target/src/spec/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1815,6 +1815,8 @@ supported_targets! {
("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>]>
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 2 additions & 0 deletions src/bootstrap/src/core/build_steps/llvm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
}
Expand Down
2 changes: 2 additions & 0 deletions src/bootstrap/src/core/sanity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/ci/docker/host-x86_64/dist-various-2/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions src/doc/rustc/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 2 additions & 0 deletions src/doc/rustc/src/platform-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
56 changes: 56 additions & 0 deletions src/doc/rustc/src/platform-support/x86_64-unknown-linux-gnumsan.md
Original file line number Diff line number Diff line change
@@ -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`.
56 changes: 56 additions & 0 deletions src/doc/rustc/src/platform-support/x86_64-unknown-linux-gnutsan.md
Original file line number Diff line number Diff line change
@@ -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`.
6 changes: 6 additions & 0 deletions tests/assembly-llvm/targets/targets-elf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading