]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Makefile.in (LLINKER): New variable.
authorJason Merrill <jason@redhat.com>
Thu, 16 May 2013 15:09:31 +0000 (11:09 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 16 May 2013 15:09:31 +0000 (11:09 -0400)
* Makefile.in (LLINKER): New variable.
(mostlyclean): Remove link mutex.
* configure.ac: Handle --enable-link-mutex.
* lock-and-run.sh: New script.

From-SVN: r198977

24 files changed:
gcc/ChangeLog
gcc/Makefile.in
gcc/ada/ChangeLog
gcc/ada/gcc-interface/Make-lang.in
gcc/c/ChangeLog
gcc/c/Make-lang.in
gcc/configure
gcc/configure.ac
gcc/cp/ChangeLog
gcc/cp/Make-lang.in
gcc/doc/install.texi
gcc/fortran/ChangeLog
gcc/fortran/Make-lang.in
gcc/go/ChangeLog
gcc/go/Make-lang.in
gcc/java/ChangeLog
gcc/java/Make-lang.in
gcc/lock-and-run.sh [new file with mode: 0644]
gcc/lto/ChangeLog
gcc/lto/Make-lang.in
gcc/objc/ChangeLog
gcc/objc/Make-lang.in
gcc/objcp/ChangeLog
gcc/objcp/Make-lang.in

index b2fad18b07c07f570b90d0f996458dc1765a2dc6..fdf3072cfb9fd298834cb9a18f3254e9f7cb12f4 100644 (file)
@@ -1,3 +1,10 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Makefile.in (LLINKER): New variable.
+       (mostlyclean): Remove link mutex.
+       * configure.ac: Handle --enable-link-mutex.
+       * lock-and-run.sh: New script.
+
 2013-05-16  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
        PR target/19599
index 903125e750482f8c0c829edde359aad547925363..23e2926969e3d94bf0137d6fb6e4d1ade0023a2f 100644 (file)
@@ -235,6 +235,13 @@ LINKER = $(CC)
 LINKER_FLAGS = $(CFLAGS)
 endif
 
+# Like LINKER, but use a mutex for serializing front end links.
+ifeq (@DO_LINK_MUTEX@,true)
+LLINKER = $(SHELL) $(srcdir)/lock-and-run.sh linkfe.lck $(LINKER)
+else
+LLINKER = $(LINKER)
+endif
+
 # -------------------------------------------
 # Programs which operate on the build machine
 # -------------------------------------------
@@ -4529,6 +4536,8 @@ mostlyclean: lang.mostlyclean
        -rm -f gtype.state
 # Delete genchecksum outputs
        -rm -f *-checksum.c
+# Delete lock-and-run bits
+       -rm -rf linkfe.lck lock-stamp.*
 
 # Delete all files made by compilation
 # that don't exist in the distribution.
index 85217f4c46744c87f98ce86be0f4ae956fe84833..2c10c68653c23fd555a98611efe1c2466414123b 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * gcc-interface/Make-lang.in (gnat1$(exeext)): Use link mutex.
+
 2013-05-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        PR ada/57188
index ef12b4b438b60cfa617fc077f993c2be3450a285..4fed34fc524945ea84e2e12051e6c40e8582c7f5 100644 (file)
@@ -185,6 +185,7 @@ endif
 GCC_LINKERFLAGS = $(filter-out -Werror, $(ALL_LINKERFLAGS))
 
 GCC_LINK=$(LINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
+GCC_LLINK=$(LLINKER) $(GCC_LINKERFLAGS) $(LDFLAGS)
 
 # Lists of files for various purposes.
 
@@ -562,7 +563,8 @@ TARGET_ADA_SRCS =
 # Since the RTL should be built with the latest compiler, remove the
 #  stamp target in the parent directory whenever gnat1 is rebuilt
 gnat1$(exeext): $(TARGET_ADA_SRCS) $(GNAT1_OBJS) $(ADA_BACKEND) libcommon-target.a $(LIBDEPS)
-       +$(GCC_LINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(CFLAGS)
+       +$(GCC_LLINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) \
+         libcommon-target.a $(LIBS) $(SYSLIBS) $(BACKENDLIBS) $(CFLAGS)
        $(RM) stamp-gnatlib2-rts stamp-tools
 
 gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) ggc-none.o libcommon-target.a $(LIBDEPS)
index cdcd416bae90022280bd0d83ef9f83394259ce65..819dfeb9be98cfa0b978a2d31f23fe12013ea9ee 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (cc1$(exeext)): Use link mutex.
+
 2013-04-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * c-typeck.c (pointer_diff): Change -Wpointer-arith pedwarns
index 8310e0ab788b53d1257426f6f120fcccc6281382..47aa4cbef6fc939508de0dcda2645493a579e4aa 100644 (file)
@@ -75,7 +75,7 @@ cc1-checksum.c : build/genchecksum$(build_exeext) checksum-options \
 cc1-checksum.o : cc1-checksum.c $(CONFIG_H) $(SYSTEM_H)
 
 cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS)
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) \
          cc1-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
 #\f
 # Build hooks:
index 39e911c9830f2911ecd6d6e494b6dbe8b3b135b5..1f03eac6e27e9a0ee2f9f929a2727e71a94360ce 100755 (executable)
@@ -670,6 +670,7 @@ subdirs
 dollar
 gcc_tooldir
 enable_lto
+DO_LINK_MUTEX
 MAINT
 zlibinc
 zlibdir
@@ -916,6 +917,7 @@ with_long_double_128
 with_gc
 with_system_zlib
 enable_maintainer_mode
+enable_link_mutex
 enable_version_specific_runtime_libs
 enable_plugin
 enable_libquadmath_support
@@ -1627,6 +1629,8 @@ Optional Features:
   --enable-maintainer-mode
                           enable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
+  --enable-link-mutex     avoid linking multiple front-ends at once to avoid
+                          thrashing on the build machine
   --enable-version-specific-runtime-libs
                           specify that runtime libraries should be installed
                           in a compiler-specific directory
@@ -17830,7 +17834,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17833 "configure"
+#line 17837 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17936,7 +17940,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17939 "configure"
+#line 17943 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -27061,6 +27065,26 @@ else
   MAINT='#'
 fi
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to avoid linking multiple front-ends at once" >&5
+$as_echo_n "checking whether to avoid linking multiple front-ends at once... " >&6; }
+  # Check whether --enable-link-mutex was given.
+if test "${enable_link_mutex+set}" = set; then :
+  enableval=$enable_link_mutex; do_link_mutex=$enableval
+else
+  do_link_mutex=no
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $do_link_mutex" >&5
+$as_echo "$do_link_mutex" >&6; }
+
+if test "$do_link_mutex" = "yes"; then
+   DO_LINK_MUTEX=true
+else
+   DO_LINK_MUTEX=false
+fi
+
+
 # --------------
 # Language hooks
 # --------------
index a6cdf245ea522aff0c51ff90a945922e40604ee6..855affdf152302e307f4f35611f2e370b5fc18ab 100644 (file)
@@ -4958,6 +4958,24 @@ else
 fi
 AC_SUBST(MAINT)dnl
 
+dnl Whether to prevent multiple front-ends from linking at the same time
+
+AC_MSG_CHECKING([whether to avoid linking multiple front-ends at once])
+  AC_ARG_ENABLE(link-mutex,
+[AS_HELP_STRING([--enable-link-mutex],
+               [avoid linking multiple front-ends at once to avoid thrashing
+                on the build machine])],
+      do_link_mutex=$enableval,
+      do_link_mutex=no)
+AC_MSG_RESULT($do_link_mutex)
+
+if test "$do_link_mutex" = "yes"; then
+   DO_LINK_MUTEX=true
+else
+   DO_LINK_MUTEX=false
+fi
+AC_SUBST(DO_LINK_MUTEX)
+
 # --------------
 # Language hooks
 # --------------
index 72ec0f0dba4d0f363cc4334b80adbd62effc16f1..a398050745e8e436a8395c379d763ce4d9060b9f 100644 (file)
@@ -1,5 +1,7 @@
 2013-05-16  Jason Merrill  <jason@redhat.com>
 
+       * Make-lang.in (cc1plus$(exeext)): Use link mutex.
+
        PR c++/57279
        * decl.c (grokdeclarator): Allow member function qualifiers in
        TYPENAME context in C++11 mode.
index cda4897ceae4a3dd9bd78d211ea0d6ff613f2075..df8ed3ee0d9de7ff94b18b21c753d342d739a859 100644 (file)
@@ -100,7 +100,7 @@ cc1plus-checksum.c : build/genchecksum$(build_exeext) checksum-options \
 cc1plus-checksum.o : cc1plus-checksum.c $(CONFIG_H) $(SYSTEM_H)
 
 cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
              $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
 
 ifeq ($(ENABLE_MAINTAINER_RULES), true)
index 1339018449d025a43415ec3cf1ea95c9593f1c2a..e05cbed9fea121d3f8a03786d1a6bf7afaa7e86d 100644 (file)
@@ -1293,6 +1293,11 @@ opposite effect.  If neither option is specified, the configure script
 will try to guess whether the @code{.init_array} and
 @code{.fini_array} sections are supported and, if they are, use them.
 
+@item --enable-link-mutex
+When building GCC, use a mutex to avoid linking the compilers for
+multiple languages at the same time, to avoid thrashing on build
+systems with limited free memory.  The default is not to use such a mutex.
+
 @item --enable-maintainer-mode
 The build rules that regenerate the Autoconf and Automake output files as
 well as the GCC master message catalog @file{gcc.pot} are normally
index 66b20c0457ce94517fc13e1e3420bf9cdfd49412..7ac54ca0e70bb9adaf52c726df1c27e4a8254a83 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (f951$(exeext)): Use link mutex.
+
 2013-05-05  Tobias Burnus  <burnus@net-b.de>
 
        * resolve.c (conformable_arrays): Avoid segfault
index c3f826cbf643faf094d669fb952d71e13ae704ff..ee704233bba0781b3e85edfb07fb4d870678448b 100644 (file)
@@ -98,7 +98,7 @@ gfortran-cross$(exeext): gfortran$(exeext)
 # The compiler itself is called f951.
 f951$(exeext): $(F95_OBJS) \
                $(BACKEND) $(LIBDEPS) attribs.o
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
                $(F95_OBJS) $(BACKEND) $(ZLIB) $(LIBS) attribs.o \
                $(BACKENDLIBS)
 
index 61739cea4f2202d9fa5c1cc63892d7606616ce88..aadca50dd8a5d6c3bca765d369913a0f83d3e97f 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (go1$(exeext)): Use link mutex.
+
 2013-01-16  Shenghou Ma  <minux.ma@gmail.com>
 
        * gospec.c: pass -u pthread_create to linker when static linking.
index dd98080920284536cdc60f50521b3194d7da48ea..5fe40835188fa856bdfc27e20b9bc029801f55e6 100644 (file)
@@ -76,7 +76,7 @@ GO_OBJS = \
        go/unsafe.o
 
 go1$(exeext): $(GO_OBJS) attribs.o $(BACKEND) $(LIBDEPS)
-       +$(CXX) $(ALL_CXXFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
              $(GO_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
 
 # Documentation.
index 993890d00795670ac5eea4458c553cb73da088b2..fef5819af275ac4000a1fd0e1d583c605d0c208d 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (jc1$(exeext)): Use link mutex.
+
 2013-05-06  Jakub Jelinek  <jakub@redhat.com>
 
        PR libgcj/57074
index 7ed3220c02a307cd508e3606d867561f4079154e..8a6210fea3b5f9d2722498db522f3212be455724 100644 (file)
@@ -99,7 +99,7 @@ jvspec.o-warn = -Wno-error
 
 jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS) attribs.o
        rm -f $@
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
                $(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o $(BACKENDLIBS)
 
 jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
diff --git a/gcc/lock-and-run.sh b/gcc/lock-and-run.sh
new file mode 100644 (file)
index 0000000..abefa06
--- /dev/null
@@ -0,0 +1,29 @@
+#! /bin/sh
+# Shell-based mutex using mkdir.
+
+lockdir=$1 prog=$2; shift 2 || exit 1
+count=0
+# Remember when we started trying to acquire the lock.
+touch lock-stamp.$$
+trap 'rm -r "$lockdir" lock-stamp.$$' 0
+until mkdir "$lockdir" 2>/dev/null; do
+    # Say something periodically so the user knows what's up.
+    if [ `expr $count % 30` = 0 ]; then
+       # Reset if the lock has been renewed.
+       if [ -n "`find \"$lockdir\" -newer lock-stamp.$$`" ]; then
+           touch lock-stamp.$$
+           count=1
+       # Steal the lock after 5 minutes.
+       elif [ $count = 300 ]; then
+           echo removing stale $lockdir >&2
+           rm -r "$lockdir"
+       else
+           echo waiting to acquire $lockdir >&2
+       fi
+    fi
+    sleep 1
+    count=`expr $count + 1`
+done
+echo $prog "$@"
+$prog "$@"
+# The trap runs on exit.
index 452b4468f4cfc24884c673ae0ce5cd26109ec81f..965b555c92e6d1be97cfa73a7d9da281dbe368ce 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in ($(LTO_EXE)): Use link mutex.
+
 2013-05-15  Martin Jambor  <mjambor@suse.cz>
 
        * lto-partition.c (lto_balanced_map): Print symbol order instead
index a0bdc2667be6c4124846d6159e30f9afe76f4b58..22df32cde2e85b66512e0fe8539cb74c8b91a751 100644 (file)
@@ -71,7 +71,7 @@ lto.stagefeedback:
 lto-warn = $(STRICT_WARN)
 
 $(LTO_EXE): $(LTO_OBJS) $(BACKEND) $(LIBDEPS)
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
                $(LTO_OBJS) $(BACKEND) $(BACKENDLIBS) $(LIBS)
 
 # Dependencies
index 7c303c63b559a6326fda2c34d484e4f5335e4a1b..d4ed4187abe8fa15590d3db4497b7bed160942a3 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (cc1obj$(exeext)): Use link mutex.
+
 2012-11-20  Diego Novillo  <dnovillo@google.com>
 
        * objc-act.c: Replace all vec<T, A>() initializers with vNULL.
index 9e005c14c171b4a91244511e2aa7990c4c801be1..f04d60686c81b0817c490eec473cd9e0f44244b1 100644 (file)
@@ -68,7 +68,7 @@ cc1obj-checksum.c : build/genchecksum$(build_exeext) checksum-options \
 cc1obj-checksum.o : cc1obj-checksum.c $(CONFIG_H) $(SYSTEM_H)
 
 cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(LIBDEPS)
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
              $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \
              $(BACKEND) $(LIBS) $(BACKENDLIBS)
 
index 329dfd34d1eb1a4d1403bb5dd8bf110fade4b8f5..7369195624a9fa0b6e502747a43392437e82ae40 100644 (file)
@@ -1,3 +1,7 @@
+2013-05-16  Jason Merrill  <jason@redhat.com>
+
+       * Make-lang.in (cc1objplus$(exeext)): Use link mutex.
+
 2012-06-02  Jason Merrill  <jason@redhat.com>
 
        * objcp-decl.c (objcp_start_struct): Adjust for change in
index 731ca9ef20f1bf665f1e0eefb742c74be8200c38..ec10fc890c293067cba1323679c5c9113cb73c6a 100644 (file)
@@ -72,7 +72,7 @@ cc1objplus-checksum.c : build/genchecksum$(build_exeext) checksum-options \
 cc1objplus-checksum.o : cc1objplus-checksum.c $(CONFIG_H) $(SYSTEM_H)
 
 cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS)
-       +$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+       +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
                $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
 
 # Objective C++ language specific files.