From cb5f636ff14c09411c5dab7475db6802bd993f40 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sun, 18 Dec 2011 00:41:26 -0800 Subject: [PATCH] rustc: Don't emit compact unwind info on mac It's not compatible with the subtlety of __morestack --- mk/platform.mk | 2 +- src/comp/back/link.rs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mk/platform.mk b/mk/platform.mk index c4cce8c94388..da3727c67eb5 100644 --- a/mk/platform.mk +++ b/mk/platform.mk @@ -76,7 +76,7 @@ ifneq ($(findstring darwin,$(CFG_OSTYPE)),) CFG_LIB_GLOB=lib$(1)-*.dylib CFG_UNIXY := 1 CFG_LDENV := DYLD_LIBRARY_PATH - CFG_GCCISH_LINK_FLAGS += -dynamiclib -lpthread -framework CoreServices + CFG_GCCISH_LINK_FLAGS += -dynamiclib -lpthread -framework CoreServices -Wl,-no_compact_unwind CFG_GCCISH_DEF_FLAG := -Wl,-exported_symbols_list, # Darwin has a very blurry notion of "64 bit", and claims it's running # "on an i386" when the whole userspace is 64-bit and the compiler diff --git a/src/comp/back/link.rs b/src/comp/back/link.rs index 9afcc23376a5..eadb7eba5913 100644 --- a/src/comp/back/link.rs +++ b/src/comp/back/link.rs @@ -657,6 +657,14 @@ fn link_binary(sess: session::session, gcc_args += ["-lrt", "-ldl"]; } + // OS X 10.6 introduced 'compact unwind info', which is produced by the + // linker from the dwarf unwind info. Unfortunately, it does not seem to + // understand how to unwind our __morestack frame, so we have to turn it + // off. This has impacted some other projects like GHC. + if sess.get_targ_cfg().os == session::os_macos { + gcc_args += ["-Wl,-no_compact_unwind"]; + } + // Stack growth requires statically linking a __morestack function gcc_args += ["-lmorestack"];