From c30f06c6f9b4580b22ca150873469d52a7c1d1cc Mon Sep 17 00:00:00 2001
From: Gabor Pali <pali.gabor@gmail.com>
Date: Sun, 20 May 2012 07:36:47 +0000
Subject: [PATCH] Rework fix for #5240 to avoid spamming the output with
linker warnings.
---
aclocal.m4 | 71 ++++++++++++++++++++++++++------------
compiler/ghc.mk | 4 ++
compiler/main/DriverPipeline.hs | 11 ++++++
configure.ac | 4 +-
mk/config.mk.in | 6 +++
5 files changed, 71 insertions(+), 25 deletions(-)
diff --git a/aclocal.m4 b/aclocal.m4
index f05dfe9..1513c4c 100644
|
a
|
b
|
|
| 459 | 459 | fi |
| 460 | 460 | |
| 461 | 461 | # Reduce memory usage when linking. See trac #5240. |
| 462 | | if test -n "$LdHashSize31" |
| 463 | | then |
| 464 | | $3="$$3 -Wl,$LdHashSize31" |
| 465 | | $4="$$4 $LdHashSize31" |
| | 462 | if test "$LdHashSize31" = "YES"; then |
| | 463 | $4="$$4 --hash-size=31" |
| 466 | 464 | fi |
| 467 | | if test -n "$LdReduceMemoryOverheads" |
| 468 | | then |
| 469 | | $3="$$3 -Wl,$LdReduceMemoryOverheads" |
| 470 | | $4="$$4 $LdReduceMemoryOverheads" |
| | 465 | if test "$LdReduceMemoryOverheads" = "YES"; then |
| | 466 | $4="$$4 --reduce-memory-overheads" |
| 471 | 467 | fi |
| 472 | 468 | |
| 473 | 469 | rm -f conftest.c conftest.o |
| … |
… |
|
| 880 | 876 | ])# FP_PROG_LD_X |
| 881 | 877 | |
| 882 | 878 | |
| 883 | | # FP_PROG_LD_HashSize31 |
| 884 | | # ------------ |
| 885 | | # Sets the output variable LdHashSize31 to --hash-size=31 if ld supports |
| 886 | | # this flag. Otherwise the variable's value is empty. |
| 887 | | AC_DEFUN([FP_PROG_LD_HashSize31], |
| | 879 | # FP_PROG_LD_HASHSIZE31 |
| | 880 | # --------------------- |
| | 881 | |
| | 882 | # Sets the output variable LdHashSize31 to YES if ld supports |
| | 883 | # this flag. Otherwise the variable's value is NO. |
| | 884 | AC_DEFUN([FP_PROG_LD_HASHSIZE31], |
| 888 | 885 | [ |
| 889 | | FP_PROG_LD_FLAG([--hash-size=31],[LdHashSize31]) |
| 890 | | ])# FP_PROG_LD_HashSize31 |
| | 886 | AC_CACHE_CHECK([whether ld understands --hash-size=31], [fp_cv_ld_hashsize31], |
| | 887 | [echo 'foo() {}' > conftest.c |
| | 888 | ${CC-cc} -c conftest.c |
| | 889 | if ${LdCmd} --hash-size=31 -o conftest2.o conftest.o > /dev/null 2>&1; then |
| | 890 | fp_cv_ld_hashsize31=yes |
| | 891 | else |
| | 892 | fp_cv_ld_hashsize31=no |
| | 893 | fi |
| | 894 | rm -rf conftest*]) |
| | 895 | if test "$fp_cv_ld_hashsize31" = "yes"; then |
| | 896 | LdHashSize31=YES |
| | 897 | else |
| | 898 | LdHashSize31=NO |
| | 899 | fi |
| | 900 | AC_SUBST([LdHashSize31]) |
| | 901 | ])# FP_PROG_LD_HASHSIZE31 |
| 891 | 902 | |
| 892 | 903 | |
| 893 | | # FP_PROG_LD_ReduceMemoryOverheads |
| 894 | | # ------------ |
| 895 | | # Sets the output variable LdReduceMemoryOverheads to |
| 896 | | # --reduce-memory-overheads if ld supports this flag. |
| 897 | | # Otherwise the variable's value is empty. |
| 898 | | AC_DEFUN([FP_PROG_LD_ReduceMemoryOverheads], |
| | 904 | # FP_PROG_LD_REDUCEMEMORYOVERHEADS |
| | 905 | # -------------------------------- |
| | 906 | |
| | 907 | # Sets the output variable LdReduceMemoryOverheads to YES if ld supports |
| | 908 | # this flag. Otherwise the variable's value is NO. |
| | 909 | AC_DEFUN([FP_PROG_LD_REDUCEMEMORYOVERHEADS], |
| 899 | 910 | [ |
| 900 | | FP_PROG_LD_FLAG([--reduce-memory-overheads],[LdReduceMemoryOverheads]) |
| 901 | | ])# FP_PROG_LD_ReduceMemoryOverheads |
| | 911 | AC_CACHE_CHECK([whether ld understands --reduce-memory-overheads], [fp_cv_ld_reduce_memory_overheads], |
| | 912 | [echo 'foo() {}' > conftest.c |
| | 913 | ${CC-cc} -c conftest.c |
| | 914 | if ${LdCmd} --reduce-memory-overheads -o conftest2.o conftest.o > /dev/null 2>&1; then |
| | 915 | fp_cv_ld_reduce_memory_overheads=yes |
| | 916 | else |
| | 917 | fp_cv_ld_reduce_memory_overheads=no |
| | 918 | fi |
| | 919 | rm -rf conftest*]) |
| | 920 | if test "$fp_cv_ld_reduce_memory_overheads" = "yes"; then |
| | 921 | LdReduceMemoryOverheads=YES |
| | 922 | else |
| | 923 | LdReduceMemoryOverheads=NO |
| | 924 | fi |
| | 925 | AC_SUBST([LdReduceMemoryOverheads]) |
| | 926 | ])# FP_PROG_LD_REDUCEMEMORYOVERHEADS |
| 902 | 927 | |
| 903 | 928 | |
| 904 | 929 | # FP_PROG_LD_BUILD_ID |
diff --git a/compiler/ghc.mk b/compiler/ghc.mk
index a3005db..b4c9ed2 100644
|
a
|
b
|
|
| 105 | 105 | @echo 'cRAWCPP_FLAGS = "$(RAWCPP_FLAGS)"' >> $@ |
| 106 | 106 | @echo 'cLdHasNoCompactUnwind :: String' >> $@ |
| 107 | 107 | @echo 'cLdHasNoCompactUnwind = "$(LdHasNoCompactUnwind)"' >> $@ |
| | 108 | @echo 'cLdHashSize31 :: String' >> $@ |
| | 109 | @echo 'cLdHashSize31 = "$(LdHashSize31)"' >> $@ |
| | 110 | @echo 'cLdReduceMemoryOverheads :: String' >> $@ |
| | 111 | @echo 'cLdReduceMemoryOverheads = "$(LdReduceMemoryOverheads)"' >> $@ |
| 108 | 112 | @echo 'cLdIsGNULd :: String' >> $@ |
| 109 | 113 | @echo 'cLdIsGNULd = "$(LdIsGNULd)"' >> $@ |
| 110 | 114 | @echo 'cLdHasBuildId :: String' >> $@ |
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index 335df4f..baaf37b 100644
|
a
|
b
|
|
| 1775 | 1775 | then ["-Wl,-no_compact_unwind"] |
| 1776 | 1776 | else []) |
| 1777 | 1777 | |
| | 1778 | -- Reduce linker memory usage dramatically by setting the |
| | 1779 | -- hash size to 31 and enabling the "reduce memory |
| | 1780 | -- overheads" option (if possible). See #5240. |
| | 1781 | ++ (if cLdHashSize31 == "YES" |
| | 1782 | then ["-Wl,--hash-size=31"] |
| | 1783 | else []) |
| | 1784 | |
| | 1785 | ++ (if cLdReduceMemoryOverheads == "YES" |
| | 1786 | then ["-Wl,--reduce-memory-overheads"] |
| | 1787 | else []) |
| | 1788 | |
| 1778 | 1789 | -- '-Wl,-read_only_relocs,suppress' |
| 1779 | 1790 | -- ld gives loads of warnings like: |
| 1780 | 1791 | -- ld: warning: text reloc in _base_GHCziArr_unsafeArray_info to _base_GHCziArr_unsafeArray_closure |
diff --git a/configure.ac b/configure.ac
index aeea6a4..e56f120 100644
|
a
|
b
|
|
| 533 | 533 | dnl |
| 534 | 534 | FP_CC_LLVM_BACKEND |
| 535 | 535 | |
| 536 | | FP_PROG_LD_HashSize31 |
| 537 | | FP_PROG_LD_ReduceMemoryOverheads |
| | 536 | FP_PROG_LD_HASHSIZE31 |
| | 537 | FP_PROG_LD_REDUCEMEMORYOVERHEADS |
| 538 | 538 | |
| 539 | 539 | FPTOOLS_SET_C_LD_FLAGS([target],[CFLAGS],[LDFLAGS],[IGNORE_LINKER_LD_FLAGS],[CPPFLAGS]) |
| 540 | 540 | FPTOOLS_SET_C_LD_FLAGS([build],[CONF_CC_OPTS_STAGE0],[CONF_GCC_LINKER_OPTS_STAGE0],[CONF_LD_LINKER_OPTS_STAGE0],[CONF_CPP_OPTS_STAGE0]) |
diff --git a/mk/config.mk.in b/mk/config.mk.in
index 1cf8685..eef63b2 100644
|
a
|
b
|
|
| 735 | 735 | # and compiler/main/DriverPipeline.hs. |
| 736 | 736 | LdHasNoCompactUnwind = @LdHasNoCompactUnwind@ |
| 737 | 737 | |
| | 738 | # Set to YES if ld has the --hash-size flag. See #5240. |
| | 739 | LdHashSize31 = @LdHashSize31@ |
| | 740 | |
| | 741 | # Set to YES if ld has the --reduce-memory-overheads flag. See #5240. |
| | 742 | LdReduceMemoryOverheads = @LdReduceMemoryOverheads@ |
| | 743 | |
| 738 | 744 | # On MSYS, building with SplitObjs=YES fails with |
| 739 | 745 | # ar: Bad file number |
| 740 | 746 | # see #3201. We need to specify a smaller max command-line size |