This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This patch addresses PR other/35107, in which we unnecessarily link various host programs with GMP/MPFR when we don't need to. Only things that get linked with libbackend.a need mpfr, so xgcc, cpp, gcov, etc don't need to load the shared libraries at runtime. The solution to this issue is to remove the $(GMPLIBS) Makefile variable from $(LIBS), and instead move it to just the executables that need it. (Note $(GMPLIBS) contains both -lgmp and -lmpfr). Fixed by the patch below, bootstrapped on x86_64-unknown-linux-gnu using --enable-languages=c,ada,c++,fortran,java,objc,obj-c++,treelang. I verified using ldd that only the specified programs load libgmp.so at runtime, whereas before everyone of them did so. IMHO this patch is safe for this stage because it doesn't alter the compiler itself, only the build process. Either it works or it doesn't. But I understand if it must be postponed to 4.4. Okay for mainline? If so when? Thanks, --Kaveh 2008-02-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> PR other/35107 * Makefile.in (LIBS): Remove $(GMPLIBS). (cc1-dummy, cc1): Add $(GMPLIBS). ada: PR other/35107 * Make-lang.in (gnat1): Add $(GMPLIBS). cp: PR other/35107 * Make-lang.in (cc1plus-dummy, cc1plus): Add $(GMPLIBS). fortran: PR other/35107 * Make-lang.in (f951): Add $(GMPLIBS). java: PR other/35107 * Make-lang.in (jc1): Add $(GMPLIBS). objc: PR other/35107 * Make-lang.in (cc1obj-dummy, cc1obj): Add $(GMPLIBS). objcp: PR other/35107 * Make-lang.in (cc1objplus-dummy, cc1objplus): Add $(GMPLIBS). treelang: PR other/35107 * Make-lang.in (tree1): Add $(GMPLIBS). diff -rup orig/egcc-SVN20080206/gcc/Makefile.in egcc-SVN20080206/gcc/Makefile.in --- orig/egcc-SVN20080206/gcc/Makefile.in 2008-01-24 22:51:59.000000000 +0100 +++ egcc-SVN20080206/gcc/Makefile.in 2008-02-06 19:32:53.000000000 +0100 @@ -873,7 +873,7 @@ BUILD_LIBDEPS= $(BUILD_LIBIBERTY) # How to link with both our special library facilities # and the system's installed libraries. -LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) $(GMPLIBS) +LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) # Any system libraries needed just for GNAT. SYSLIBS = @GNAT_LIBEXC@ @@ -1554,7 +1554,7 @@ dummy-checksum.o : dummy-checksum.c cc1-dummy$(exeext): $(C_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) dummy-checksum.o \ - $(BACKEND) $(LIBS) + $(BACKEND) $(LIBS) $(GMPLIBS) cc1-checksum.c : cc1-dummy$(exeext) build/genchecksum$(build_exeext) build/genchecksum$(build_exeext) cc1-dummy$(exeext) > $@ @@ -1563,7 +1563,7 @@ cc1-checksum.o : cc1-checksum.c cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) cc1-checksum.o \ - $(BACKEND) $(LIBS) + $(BACKEND) $(LIBS) $(GMPLIBS) # # Build libgcc.a. diff -rup orig/egcc-SVN20080206/gcc/ada/Make-lang.in egcc-SVN20080206/gcc/ada/Make-lang.in --- orig/egcc-SVN20080206/gcc/ada/Make-lang.in 2007-12-31 19:14:30.000000000 +0100 +++ egcc-SVN20080206/gcc/ada/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -290,7 +290,7 @@ 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) $(LIBDEPS) - $(GCC_LINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(ALL_CFLAGS) $(LIBS) $(SYSLIBS) + $(GCC_LINK) -o $@ $(GNAT1_OBJS) $(ADA_BACKEND) $(ALL_CFLAGS) $(LIBS) $(SYSLIBS) $(GMPLIBS) $(RM) stamp-gnatlib2 stamp-tools gnatbind$(exeext): ada/b_gnatb.o $(CONFIG_H) $(GNATBIND_OBJS) diff -rup orig/egcc-SVN20080206/gcc/cp/Make-lang.in egcc-SVN20080206/gcc/cp/Make-lang.in --- orig/egcc-SVN20080206/gcc/cp/Make-lang.in 2007-12-31 19:13:59.000000000 +0100 +++ egcc-SVN20080206/gcc/cp/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -91,7 +91,7 @@ cp-warn = $(STRICT_WARN) $(CXX_COMPAT_WA cc1plus-dummy$(exeext): $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) + $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS) cc1plus-checksum.c : cc1plus-dummy$(exeext) build/genchecksum$(build_exeext) build/genchecksum$(build_exeext) cc1plus-dummy$(exeext) > $@ @@ -100,7 +100,7 @@ cc1plus-checksum.o : cc1plus-checksum.c cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) + $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS) # Special build rules. $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf diff -rup orig/egcc-SVN20080206/gcc/fortran/Make-lang.in egcc-SVN20080206/gcc/fortran/Make-lang.in --- orig/egcc-SVN20080206/gcc/fortran/Make-lang.in 2007-12-31 19:14:32.000000000 +0100 +++ egcc-SVN20080206/gcc/fortran/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -94,7 +94,7 @@ gfortran-cross$(exeext): gfortran$(exeex f951$(exeext): $(F95_OBJS) \ $(BACKEND) $(LIBDEPS) attribs.o $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(F95_OBJS) $(BACKEND) $(LIBS) attribs.o + $(F95_OBJS) $(BACKEND) $(LIBS) attribs.o $(GMPLIBS) gt-fortran-trans.h : s-gtype; @true # diff -rup orig/egcc-SVN20080206/gcc/java/Make-lang.in egcc-SVN20080206/gcc/java/Make-lang.in --- orig/egcc-SVN20080206/gcc/java/Make-lang.in 2007-12-31 19:11:20.000000000 +0100 +++ egcc-SVN20080206/gcc/java/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -102,7 +102,7 @@ java/parse.o-warn = -Wno-error jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS) attribs.o rm -f $@ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o + $(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o $(GMPLIBS) jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS) rm -f $@ diff -rup orig/egcc-SVN20080206/gcc/objc/Make-lang.in egcc-SVN20080206/gcc/objc/Make-lang.in --- orig/egcc-SVN20080206/gcc/objc/Make-lang.in 2007-12-31 19:11:24.000000000 +0100 +++ egcc-SVN20080206/gcc/objc/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -52,7 +52,7 @@ OBJC_OBJS = objc/objc-lang.o objc/objc-a cc1obj-dummy$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ $(OBJC_OBJS) $(C_AND_OBJC_OBJS) dummy-checksum.o \ - $(BACKEND) $(LIBS) + $(BACKEND) $(LIBS) $(GMPLIBS) cc1obj-checksum.c : cc1obj-dummy$(exeext) build/genchecksum$(build_exeext) build/genchecksum$(build_exeext) cc1obj-dummy$(exeext) > $@ @@ -62,7 +62,7 @@ cc1obj-checksum.o : cc1obj-checksum.c cc1obj$(exeext): $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ $(OBJC_OBJS) $(C_AND_OBJC_OBJS) cc1obj-checksum.o \ - $(BACKEND) $(LIBS) + $(BACKEND) $(LIBS) $(GMPLIBS) # Objective C language specific files. diff -rup orig/egcc-SVN20080206/gcc/objcp/Make-lang.in egcc-SVN20080206/gcc/objcp/Make-lang.in --- orig/egcc-SVN20080206/gcc/objcp/Make-lang.in 2007-12-31 19:13:52.000000000 +0100 +++ egcc-SVN20080206/gcc/objcp/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -54,7 +54,7 @@ OBJCXX_OBJS = objcp/objcp-act.o objcp/ob cc1objplus-dummy$(exeext): $(OBJCXX_OBJS) dummy-checksum.o $(BACKEND) \ $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(OBJCXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) + $(OBJCXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS) cc1objplus-checksum.c : cc1objplus-dummy$(exeext) build/genchecksum$(build_exeext) build/genchecksum$(build_exeext) cc1objplus-dummy$(exeext) > $@ @@ -63,7 +63,7 @@ cc1objplus-checksum.o : cc1objplus-check cc1objplus$(exeext): $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBDEPS) $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ - $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS) + $(OBJCXX_OBJS) cc1objplus-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS) # Objective C++ language specific files. diff -rup orig/egcc-SVN20080206/gcc/treelang/Make-lang.in egcc-SVN20080206/gcc/treelang/Make-lang.in --- orig/egcc-SVN20080206/gcc/treelang/Make-lang.in 2007-12-31 19:14:40.000000000 +0100 +++ egcc-SVN20080206/gcc/treelang/Make-lang.in 2008-02-06 19:26:49.000000000 +0100 @@ -84,7 +84,7 @@ tree1$(exeext): treelang/tree1.o treelan $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ treelang/tree1.o treelang/treetree.o treelang/tree-convert.o \ treelang/lex.o treelang/parse.o \ - $(BACKEND) $(LIBS) attribs.o + $(BACKEND) $(LIBS) attribs.o $(GMPLIBS) # Create the compiler driver treelang. gtreelang$(exeext): $(GCC_OBJS) version.o prefix.o intl.o $(EXTRA_GCC_OBJS) \
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |