From a46865981e9d5dd1eee555243983e0ea74df5d73 Mon Sep 17 00:00:00 2001 From: Vadim Chugunov <vadimcn@gmail.com> Date: Mon, 22 Sep 2014 16:33:18 -0700 Subject: [PATCH] Link libgcc statically on Win64. Allow linking it statically on Win32 with an override. --- src/librustc/back/link.rs | 13 +++++++++---- src/librustrt/libunwind.rs | 1 - 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs index d31e19b4467f8..e6e9448fa563e 100644 --- a/src/librustc/back/link.rs +++ b/src/librustc/back/link.rs @@ -991,10 +991,15 @@ fn link_args(cmd: &mut Command, } if sess.targ_cfg.os == abi::OsWindows { - // Make sure that we link to the dynamic libgcc, otherwise cross-module - // DWARF stack unwinding will not work. - // This behavior may be overridden by --link-args "-static-libgcc" - cmd.arg("-shared-libgcc"); + if sess.targ_cfg.arch == abi::X86 { + // Make sure that we link to the dynamic libgcc, otherwise cross-module + // DWARF stack unwinding will not work. + // This behavior may be overridden by -Clink-args="-static-libgcc" + cmd.arg("-shared-libgcc"); + } else { + // On Win64 unwinding is handled by the OS, so we can link libgcc statically. + cmd.arg("-static-libgcc"); + } // And here, we see obscure linker flags #45. On windows, it has been // found to be necessary to have this flag to compile liblibc. diff --git a/src/librustrt/libunwind.rs b/src/librustrt/libunwind.rs index 69df8a7fd66e3..aab75d7f7746d 100644 --- a/src/librustrt/libunwind.rs +++ b/src/librustrt/libunwind.rs @@ -87,7 +87,6 @@ pub type _Unwind_Exception_Cleanup_Fn = #[cfg(target_os = "linux")] #[cfg(target_os = "freebsd")] -#[cfg(target_os = "windows")] #[link(name = "gcc_s")] extern {}