From cefadf05f9319f01b0245de72f4e5941a046b0e9 Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Tue, 29 Sep 2015 01:01:48 +0300 Subject: [PATCH 1/2] Enable and make stage0 landing pads optional --- configure | 1 + mk/main.mk | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/configure b/configure index fa2117dcc1d..6dfa31bc3fd 100755 --- a/configure +++ b/configure @@ -578,6 +578,7 @@ opt ccache 0 "invoke gcc/clang via ccache to reuse object files between builds" opt local-rust 0 "use an installed rustc rather than downloading a snapshot" opt llvm-static-stdcpp 0 "statically link to libstdc++ for LLVM" opt rpath 0 "build rpaths into rustc itself" +opt stage0-landing-pads 1 "enable landing pads during bootstrap with stage0" # This is used by the automation to produce single-target nightlies opt dist-host-only 0 "only install bins for the host architecture" opt inject-std-version 1 "inject the current compiler version of libstd into programs" diff --git a/mk/main.mk b/mk/main.mk index fa6d8097150..dedf4ec57ea 100644 --- a/mk/main.mk +++ b/mk/main.mk @@ -170,7 +170,10 @@ RUST_LIB_FLAGS_ST3 += -C prefer-dynamic # Landing pads require a lot of codegen. We can get through bootstrapping faster # by not emitting them. -RUSTFLAGS_STAGE0 += -Z no-landing-pads + +ifdef CFG_DISABLE_STAGE0_LANDING_PADS + RUSTFLAGS_STAGE0 += -Z no-landing-pads +endif # Enable MIR to "always build" for crates where this works. This is # just temporary while MIR is being actively built up -- it's just a From a7f2a7881dc724fd9e36e31c8bf969225f72f792 Mon Sep 17 00:00:00 2001 From: Simonas Kazlauskas Date: Fri, 2 Oct 2015 22:19:51 +0300 Subject: [PATCH 2/2] Fix MSVC stage0 with landing pads enabled --- src/libstd/sys/common/unwind/mod.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libstd/sys/common/unwind/mod.rs b/src/libstd/sys/common/unwind/mod.rs index c06d7886a75..3978aeb39bc 100644 --- a/src/libstd/sys/common/unwind/mod.rs +++ b/src/libstd/sys/common/unwind/mod.rs @@ -81,8 +81,18 @@ use sys_common::mutex::Mutex; #[path = "seh.rs"] #[doc(hidden)] pub mod imp; +// SNAP: i686-pc-windows-gnu +#[cfg(all(stage0, windows, target_arch = "x86_64", target_env = "gnu"))] +#[path = "seh64_gnu.rs"] #[doc(hidden)] +pub mod imp; + +// SNAP: x86_64-pc-windows-msvc +#[cfg(all(stage0, windows, target_arch = "x86_64", target_env = "msvc"))] +#[path = "seh.rs"] #[doc(hidden)] +pub mod imp; + // x86_64-pc-windows-* -#[cfg(all(windows, target_arch = "x86_64"))] +#[cfg(all(not(stage0), windows, target_arch = "x86_64"))] #[path = "seh64_gnu.rs"] #[doc(hidden)] pub mod imp;