One must apparently use gold and the lto-plugin when applying link time optimization to files that are stored in archives. Therefore, we should build gold. If gcc-4.5.0 is configured with --without-gnu-ld, gold is not built. If it is configured with --with-gnu-ld and --enable-gold, gold is built and ld is not built. Apparently, this causes xgcc to use Sun's ld rather than gold,but still hand Sun's ld parameters that are meant for gnu's ld. When passed the emulation argument "-m elf_x86_64", Sun's ld interprets "elf_x86_64" as a file that cannot be opened and fails.
Details Download and unpack libelf-0.8.13, binutils-2.20, gcc-core-4.5.0, gcc-g++-4.5.0, gmp-4.3.2, mpfr-2.4.2, mpc-0.8.2, ppl-0.10.2 into peer directories. Symbolic links inside gcc-4.5.0 > ln -s ../binutils-2.20/bfd > ln -s ../binutils-2.20/binutils > ln -s ../binutils-2.20/elfcpp > ln -s ../binutils-2.20/gas > ln -s ../binutils-2.20/gold > ln -s ../binutils-2.20/gprof > ln -s ../binutils-2.20/ld > ln -s ../binutils-2.20/opcodes > ln -s ../mpc-0.8.2 mpc > ln -s ../mpfr-2.4.2 mpfr > ln -s ../gmp-4.3.2 gmp CONFIG_SHELL = /usr/bin/ksh version of gcc/g++ used to build stage1 = 4.4.4 version of make = 3.81 version of flex = 2.5.4 Work around bug 44621 so that gold is built. Work around reference to vasprintf (doesn't exist on Solaris) in gold's incremental.cc so that the gold build completes. Create a directory named "build" as a peer to gcc-4.5.0, enter it and configure a build of gcc-4.5.0 as follows: $TOOL/gcc/4.5.0/gcc-4.5.0/configure --prefix=$TOOL/gcc/4.5.0/i386-pc-solaris2.10 --with-gnu-as --with-gnu-ld --enable-shared --enable-lto --with-libelf=/usr/local --disable-multilib --enable-gold --enable-stage1-languages=c,c++ i686-pc-solaris2.10 The build fails attempting to build libgcc. # @multilib_dir@ is not really necessary, but sometimes it has # more uses than just a directory name. /usr/bin/ksh /tool/gcc/4.5.0/gcc-4.5.0/libgcc/../mkinstalldirs amd64 mkdir -p -- amd64 /tool/gcc/4.5.0/build/./gcc/xgcc -B/tool/gcc/4.5.0/build/./gcc/ -B/tool/gcc/4.5.0/i386-pc-solaris2.10/i686-pc-solaris2.10/bin/ -B/tool/gcc/4.5.0/i386-pc-solaris2.10/i686-pc-solaris2.10/lib/ -isystem /tool/gcc/4.5.0/i386-pc-solaris2.10/i686-pc-solaris2.10/include -isystem /tool/gcc/4.5.0/i386-pc-solaris2.10/i686-pc-solaris2.10/sys-include -O2 -g -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -shared -nodefaultlibs -Wl,--soname=libgcc_s.so.1 -Wl,--version-script=libgcc.map -o amd64/libgcc_s.so.1.tmp -g -O2 -m64 -B./ _muldi3_s.o _negdi2_s.o _lshrdi3_s.o _ashldi3_s.o _ashrdi3_s.o _cmpdi2_s.o _ucmpdi2_s.o _clear_cache_s.o _enable_execute_stack_s.o _trampoline_s.o __main_s.o _absvsi2_s.o _absvdi2_s.o _addvsi3_s.o _addvdi3_s.o _subvsi3_s.o _subvdi3_s.o _mulvsi3_s.o _mulvdi3_s.o _negvsi2_s.o _negvdi2_s.o _ctors_s.o _ffssi2_s.o _ffsdi2_s.o _clz_s.o _clzsi2_s.o _clzdi2_s.o _ctzsi2_s.o _ctzdi2_s.o _popcount_tab_s.o _popcountsi2_s.o _popcountdi2_s.o _paritysi2_s.o _paritydi2_s.o _powisf2_s.o _powidf2_s.o _powixf2_s.o _powitf2_s.o _mulsc3_s.o _muldc3_s.o _mulxc3_s.o _multc3_s.o _divsc3_s.o _divdc3_s.o _divxc3_s.o _divtc3_s.o _bswapsi2_s.o _bswapdi2_s.o _fixunssfsi_s.o _fixunsdfsi_s.o _fixunsxfsi_s.o _fixsfdi_s.o _fixdfdi_s.o _fixxfdi_s.o _fixunssfdi_s.o _fixunsdfdi_s.o _fixunsxfdi_s.o _floatdisf_s.o _floatdidf_s.o _floatdixf_s.o _floatundisf_s.o _floatundidf_s.o _floatundixf_s.o _divdi3_s.o _moddi3_s.o _udivdi3_s.o _umoddi3_s.o _udiv_w_sdiv_s.o _udivmoddi4_s.o addtf3_s.o divtf3_s.o eqtf2_s.o getf2_s.o letf2_s.o multf3_s.o negtf2_s.o subtf3_s.o unordtf2_s.o fixtfsi_s.o fixunstfsi_s.o floatsitf_s.o floatunsitf_s.o fixtfdi_s.o fixunstfdi_s.o floatditf_s.o floatunditf_s.o fixtfti_s.o fixunstfti_s.o floattitf_s.o floatuntitf_s.o extendsftf2_s.o extenddftf2_s.o extendxftf2_s.o trunctfsf2_s.o trunctfdf2_s.o trunctfxf2_s.o unwind-dw2_s.o unwind-dw2-fde_s.o unwind-sjlj_s.o gthr-gnat_s.o unwind-c_s.o emutls_s.o -lc && rm -f amd64/libgcc_s.so && if [ -f amd64/libgcc_s.so.1 ]; then mv -f amd64/libgcc_s.so.1 amd64/libgcc_s.so.1.backup; else true; fi && mv amd64/libgcc_s.so.1.tmp amd64/libgcc_s.so.1 && ln -s libgcc_s.so.1 amd64/libgcc_s.so ld: fatal: file elf_x86_64: open failed: No such file or directory collect2: ld returned 1 exit status make[5]: *** [libgcc_s.so] Error 1 make[5]: Leaving directory `/tool/gcc/4.5.0/build/i686-pc-solaris2.10/amd64/libgcc' make[4]: *** [multi-do] Error 1 make[4]: Leaving directory `/tool/gcc/4.5.0/build/i686-pc-solaris2.10/libgcc' make[3]: *** [all-multi] Error 2 make[3]: Leaving directory `/tool/gcc/4.5.0/build/i686-pc-solaris2.10/libgcc' make[2]: *** [all-stage1-target-libgcc] Error 2 make[2]: Leaving directory `/tool/gcc/4.5.0/build' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory `/tool/gcc/4.5.0/build' make: *** [bootstrap] Error 2 -- Summary: bootstrap fails to build libgcc when gold is built (at least on Solaris_x86) Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: Daniel dot Davies at xerox dot com GCC build triplet: i686-pc-solaris2.10 GCC host triplet: i686-pc-solaris2.10 GCC target triplet: i686-pc-solaris2.10 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44642