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

Reply via email to