-
-
Notifications
You must be signed in to change notification settings - Fork 14.4k
Create x86_64-unknown-linux-gnuasan target which enables ASAN by default #149644
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 ASAN enabled by default".into(), | ||
| ), | ||
| tier: Some(3), | ||
| host_tools: Some(false), | ||
| std: Some(true), | ||
| }; | ||
| base.supported_sanitizers = SanitizerSet::ADDRESS; | ||
| base.default_sanitizers = SanitizerSet::ADDRESS; | ||
| base | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| # `x86_64-unknown-linux-gnuasan` | ||
|
|
||
| **Tier: 3** | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again tier 2. |
||
|
|
||
| Target mirroring `x86_64-unknown-linux-gnu` with AddressSanitizer enabled by | ||
| default. | ||
| The goal of this target is to allow shipping ASAN-instrumented standard | ||
| libraries through rustup, enabling a fully instrumented binary without requiring | ||
| nightly features (build-std). | ||
jakos-sec marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| Once build-std stabilizes, we will likely no longer need this target. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Mind adding it will be removed some time after that? |
||
|
|
||
| ## 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 ASAN. 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-gnuasan"] | ||
| ``` | ||
|
|
||
| ## Building Rust programs | ||
|
|
||
| Rust does not yet ship pre-compiled artifacts for this target. To compile for | ||
| this target, you will either need to build Rust with the target enabled (see | ||
| "Building the target" above), or build your own copy of `core` by using | ||
mati865 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| `build-std` or similar. | ||
|
Comment on lines
+37
to
+40
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. As a tier 2 target, it will be distributed via rustup. I think this is no longer accurate. |
||
|
|
||
| Compilation can be done with: | ||
|
|
||
| ```text | ||
| rustc --target x86_64-unknown-linux-gnuasan your-code.rs | ||
| ``` | ||
|
|
||
| ## 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`. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's tier 2 now, right?