mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 01:34:21 +00:00
004aa15b47
This commit adds cross-language LLVM Control Flow Integrity (CFI) support to the Rust compiler by adding the `-Zsanitizer-cfi-normalize-integers` option to be used with Clang `-fsanitize-cfi-icall-normalize-integers` for normalizing integer types (see https://reviews.llvm.org/D139395). It provides forward-edge control flow protection for C or C++ and Rust -compiled code "mixed binaries" (i.e., for when C or C++ and Rust -compiled code share the same virtual address space). For more information about LLVM CFI and cross-language LLVM CFI support for the Rust compiler, see design document in the tracking issue #89653. Cross-language LLVM CFI can be enabled with -Zsanitizer=cfi and -Zsanitizer-cfi-normalize-integers, and requires proper (i.e., non-rustc) LTO (i.e., -Clinker-plugin-lto).
39 lines
1.0 KiB
Rust
39 lines
1.0 KiB
Rust
// Verifies that when compiling with -Zsanitizer=option,
|
|
// the `#[cfg(sanitize = "option")]` attribute is configured.
|
|
|
|
// needs-sanitizer-support
|
|
// needs-sanitizer-address
|
|
// needs-sanitizer-cfi
|
|
// needs-sanitizer-kcfi
|
|
// needs-sanitizer-leak
|
|
// needs-sanitizer-memory
|
|
// needs-sanitizer-thread
|
|
// check-pass
|
|
// revisions: address leak memory thread
|
|
//[address]compile-flags: -Zsanitizer=address --cfg address
|
|
//[cfi]compile-flags: -Zsanitizer=cfi --cfg cfi
|
|
//[kcfi]compile-flags: -Zsanitizer=kcfi --cfg kcfi
|
|
//[leak]compile-flags: -Zsanitizer=leak --cfg leak
|
|
//[memory]compile-flags: -Zsanitizer=memory --cfg memory
|
|
//[thread]compile-flags: -Zsanitizer=thread --cfg thread
|
|
|
|
#![feature(cfg_sanitize)]
|
|
|
|
#[cfg(all(sanitize = "address", address))]
|
|
fn main() {}
|
|
|
|
#[cfg(all(sanitize = "cfi", cfi))]
|
|
fn main() {}
|
|
|
|
#[cfg(all(sanitize = "kcfi", kcfi))]
|
|
fn main() {}
|
|
|
|
#[cfg(all(sanitize = "leak", leak))]
|
|
fn main() {}
|
|
|
|
#[cfg(all(sanitize = "memory", memory))]
|
|
fn main() {}
|
|
|
|
#[cfg(all(sanitize = "thread", thread))]
|
|
fn main() {}
|