From 7d365cf27f4249fc9b61ba8abfc813abe43f1cb7 Mon Sep 17 00:00:00 2001 From: Jorge Aparicio Date: Mon, 25 Mar 2019 22:50:07 +0100 Subject: [PATCH] compile all crates under test w/ -Zemit-stack-sizes --- src/bootstrap/bin/rustc.rs | 29 ++++++++++++++++------------- src/bootstrap/compile.rs | 4 ++++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 6f68775a85fd3..28c8a75a13ab4 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -181,28 +181,31 @@ fn main() { cmd.arg("-C").arg(format!("debug-assertions={}", debug_assertions)); } - // Build `compiler_builtins` with `-Z emit-stack-sizes` to add stack usage information. + // Build all crates in the `std` facade with `-Z emit-stack-sizes` to add stack usage + // information. // - // When you use this flag with Cargo you get stack usage information on all crates compiled - // from source, and when you are using LTO you also get information on pre-compiled crates - // like `core` and `std`. However, there's an exception: `compiler_builtins`. This crate - // is special and doesn't participate in LTO because it's always linked as a separate object - // file. Due to this it's impossible to get information about this crate using `RUSTFLAGS` - // + Cargo, or `cargo rustc`. + // When you use this `-Z` flag with Cargo you get stack usage information on all crates + // compiled from source, and when you are using LTO you also get information on pre-compiled + // crates like `core` and `std`, even if they were not compiled with `-Z emit-stack-sizes`. + // However, there's an exception: `compiler_builtins`. This crate is special and doesn't + // participate in LTO because it's always linked as a separate object file. For this reason + // it's impossible to get stack usage information about `compiler-builtins` using + // `RUSTFLAGS` + Cargo, or `cargo rustc`. // - // To make the stack usage information of this crate available to Cargo based stack usage - // analysis tools we compile `compiler_builtins` with the `-Z emit-stack-sizes` flag. The - // flag is known to currently work with targets that produce ELF files so we limit the use - // of the flag to those targets. + // To make the stack usage information of all crates under the `std` facade available to + // Cargo based stack usage analysis tools, in both LTO and non-LTO mode, we compile them + // with the `-Z emit-stack-sizes` flag. The `RUSTC_EMIT_STACK_SIZES` var helps us apply this + // flag only to the crates in the `std` facade. The `-Z` flag is known to currently work + // with targets that produce ELF files so we limit its use flag to those targets. // // NOTE(japaric) if this ever causes problem with an LLVM upgrade or any PR feel free to // remove it or comment it out - if crate_name == "compiler_builtins" + if env::var_os("RUSTC_EMIT_STACK_SIZES").is_some() && (target.contains("-linux-") || target.contains("-none-eabi") || target.ends_with("-none-elf")) { - cmd.arg("-Z").arg("emit-stack-sizes"); + cmd.arg("-Zemit-stack-sizes"); } if let Ok(s) = env::var("RUSTC_CODEGEN_UNITS") { diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 9498dbb595232..0d51d7c5ef3b8 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -97,6 +97,8 @@ impl Step for Std { let _folder = builder.fold_output(|| format!("stage{}-std", compiler.stage)); builder.info(&format!("Building stage{} std artifacts ({} -> {})", compiler.stage, &compiler.host, target)); + // compile with `-Z emit-stack-sizes`; see bootstrap/src/rustc.rs for more details + cargo.env("RUSTC_EMIT_STACK_SIZES", "1"); run_cargo(builder, &mut cargo, &libstd_stamp(builder, compiler, target), @@ -382,6 +384,8 @@ impl Step for Test { let _folder = builder.fold_output(|| format!("stage{}-test", compiler.stage)); builder.info(&format!("Building stage{} test artifacts ({} -> {})", compiler.stage, &compiler.host, target)); + // compile with `-Z emit-stack-sizes`; see bootstrap/src/rustc.rs for more details + cargo.env("RUSTC_EMIT_STACK_SIZES", "1"); run_cargo(builder, &mut cargo, &libtest_stamp(builder, compiler, target),