summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorkil Naur <naur@post11.tele.dk>2011-10-19 00:20:53 +0200
committerIan Lynagh <igloo@earth.li>2011-10-19 22:38:08 +0100
commit6067f9563d1221b4afec5b52f41e48d4a31e69c2 (patch)
treee2b98acc0949a8d66a3fe66a5b496cfb1960ff7f
parentbc876206b80f060ad1bbbaa681d1171d1980cdfc (diff)
downloadhaskell-6067f9563d1221b4afec5b52f41e48d4a31e69c2.tar.gz
FIX BUILD on OS X 10.5: Check whether ld understands -no_compact_unwind
-rw-r--r--aclocal.m425
-rw-r--r--compiler/ghc.mk2
-rw-r--r--compiler/main/DriverPipeline.hs3
-rw-r--r--configure.ac1
-rw-r--r--mk/config.mk.in4
5 files changed, 34 insertions, 1 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index bbbe7a92ac..7d0bf8681c 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -831,6 +831,31 @@ AC_SUBST([LdIsGNULd], [`echo $fp_cv_gnu_ld | sed 'y/yesno/YESNO/'`])
])# FP_PROG_LD_IS_GNU
+# FP_PROG_LD_NO_COMPACT_UNWIND
+# ----------------------------
+
+# Sets the output variable LdHasNoCompactUnwind to YES if ld supports
+# -no_compact_unwind, or NO otherwise.
+AC_DEFUN([FP_PROG_LD_NO_COMPACT_UNWIND],
+[
+AC_CACHE_CHECK([whether ld understands -no_compact_unwind], [fp_cv_ld_no_compact_unwind],
+[echo 'foo() {}' > conftest.c
+${CC-cc} -c conftest.c
+if ${LdCmd} -r -no_compact_unwind -o conftest2.o conftest.o > /dev/null 2>&1; then
+ fp_cv_ld_no_compact_unwind=yes
+else
+ fp_cv_ld_no_compact_unwind=no
+fi
+rm -rf conftest*])
+if test "$fp_cv_ld_no_compact_unwind" = yes; then
+ LdHasNoCompactUnwind=YES
+else
+ LdHasNoCompactUnwind=NO
+fi
+AC_SUBST([LdHasNoCompactUnwind])
+])# FP_PROG_LD_NO_COMPACT_UNWIND
+
+
# FP_PROG_AR
# ----------
# Sets fp_prog_ar_raw to the full path of ar and fp_prog_ar to a non-Cygwin
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
index 54dfa3efdb..4449a14307 100644
--- a/compiler/ghc.mk
+++ b/compiler/ghc.mk
@@ -105,6 +105,8 @@ endif
@echo 'cLeadingUnderscore = "$(LeadingUnderscore)"' >> $@
@echo 'cRAWCPP_FLAGS :: String' >> $@
@echo 'cRAWCPP_FLAGS = "$(RAWCPP_FLAGS)"' >> $@
+ @echo 'cLdHasNoCompactUnwind :: String' >> $@
+ @echo 'cLdHasNoCompactUnwind = "$(LdHasNoCompactUnwind)"' >> $@
@echo 'cLdIsGNULd :: String' >> $@
@echo 'cLdIsGNULd = "$(LdIsGNULd)"' >> $@
@echo 'cLdHasBuildId :: String' >> $@
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index 99d3ce7424..fd021ccb6d 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -1683,7 +1683,8 @@ linkBinary dflags o_files dep_packages = do
-- like
-- ld: warning: could not create compact unwind for .LFB3: non-standard register 5 being saved in prolog
-- on x86.
- ++ (if platformOS (targetPlatform dflags) == OSDarwin &&
+ ++ (if cLdHasNoCompactUnwind == "YES" &&
+ platformOS (targetPlatform dflags) == OSDarwin &&
platformArch (targetPlatform dflags) `elem` [ArchX86, ArchX86_64]
then ["-Wl,-no_compact_unwind"]
else [])
diff --git a/configure.ac b/configure.ac
index 5f6208392c..aec9c8857a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -702,6 +702,7 @@ dnl ** check for ld, whether it has an -x option, and if it is GNU ld
FP_PROG_LD_X
FP_PROG_LD_IS_GNU
FP_PROG_LD_BUILD_ID
+FP_PROG_LD_NO_COMPACT_UNWIND
FP_VISIBILITY_HIDDEN
diff --git a/mk/config.mk.in b/mk/config.mk.in
index aef093799b..03ea2d11c1 100644
--- a/mk/config.mk.in
+++ b/mk/config.mk.in
@@ -693,6 +693,10 @@ LdIsGNULd = @LdIsGNULd@
# disable it with --build-id=none.
LdHasBuildId = @LdHasBuildId@
+# Set to YES if ld has the --no_compact_unwind flag. See #5019
+# and compiler/main/DriverPipeline.hs.
+LdHasNoCompactUnwind = @LdHasNoCompactUnwind@
+
# On MSYS, building with SplitObjs=YES fails with
# ar: Bad file number
# see #3201. We need to specify a smaller max command-line size