https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69757

            Bug ID: 69757
           Summary: OpenBSD requires -fPIC to build.
           Product: gcc
           Version: 4.9.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: bootstrap
          Assignee: unassigned at gcc dot gnu.org
          Reporter: edd at theunixzoo dot co.uk
  Target Milestone: ---

Hi,

Having worked around #69744, I am able to build GCC-4.9.3 on OpenBSD-5.8/amd64
but not a full bootstrap.

If you build like this:

    ../configure \                                                              
        --prefix=${wrkdir}/gcc-inst \                                           
        --disable-libcilkrts \                                                  
        --program-transform-name=s,^,z, \                                       
        --verbose \                                                             
        --disable-libmudflap \                                                  
        --disable-libgomp \                                                     
        --disable-tls \                                                         
        --enable-languages=c,c++ \                                              
        --with-system-zlib \                                                    
        --disable-tls \                                                         
        --enable-threads=posix \                                                
        --enable-wchar_t \                                                      
        --disable-libstdcxx-pch \                                               
        --enable-cpp \                                                          
        --enable-shared \                                                       
      || exit $?                                                                
    $MYMAKE -j1 || exit $?                                                      
    $MYMAKE -j1 install || exit $?

You get an error like this:

checking if
/home/vext01/research/warmup_experiment/work/gcc/sd_build/./gcc/xgcc
-B/home/vext01/research/warmup_experiment/work/gcc/sd_build/./gcc/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/bin/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/lib/
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/include
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/sys-include
   supports -c -o file.o... (cached) yes
checking whether the
/home/vext01/research/warmup_experiment/work/gcc/sd_build/./gcc/xgcc
-B/home/vext01/research/warmup_experiment/work/gcc/sd_build/./gcc/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/bin/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/lib/
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/include
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/sys-include
   linker
(/home/vext01/research/warmup_experiment/work/gcc/sd_build/./gcc/collect-ld)
supports shared libraries... yes
checking whether -lc should be explicitly linked in... yes
checking dynamic linker characteristics... openbsd5.8 ld.so
checking how to hardcode library paths into programs... immediate
checking for shl_load... configure: error: Link tests are not allowed after
GCC_NO_EXECUTABLES.
Makefile:15357: recipe for target 'configure-stage1-target-libstdc++-v3' failed
gmake[2]: *** [configure-stage1-target-libstdc++-v3] Error 1
gmake[2]: Leaving directory
'/home/vext01/research/warmup_experiment/work/gcc/sd_build'
Makefile:20466: recipe for target 'stage1-bubble' failed
gmake[1]: *** [stage1-bubble] Error 2
gmake[1]: Leaving directory
'/home/vext01/research/warmup_experiment/work/gcc/sd_build'
Makefile:895: recipe for target 'all' failed
gmake: *** [all] Error 2


If you dig deep enough, you will find that this is because -fPIC is required
(at-least on amd64 it seems -- not sure about other architectures). The lack of
-fPIC causes the macros originally defined in config/no_executables.m4 to fail
in strange ways, even flipping cross_compiling=yes.

You can get the build further by adding CFLAGS=-fPIC to the configure
environment. Then the first stage boostrap succeeds, but the second stage
fails:

checking for msgmerge... no
checking for x86_64-unknown-openbsd5.8-gcc... 
/home/vext01/research/warmup_experiment/work/gcc/sd_build/./prev-gcc/xgcc
-B/home/vext01/research/warmup_experiment/work/gcc/sd_build/./prev-gcc/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/bin/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/bin/
-B/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/lib/
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/include
-isystem
/home/vext01/research/warmup_experiment/work/gcc-inst/x86_64-unknown-openbsd5.8/sys-include
 
checking for C compiler default output file name... 
configure: error: in
`/home/vext01/research/warmup_experiment/work/gcc/sd_build/intl':
configure: error: C compiler cannot create executables
See `config.log' for more details.
Makefile:9183: recipe for target 'configure-stage2-intl' failed

This is in-fact the same issue. -fPIC was not passed onto the second stage
bootstrap. If you pass --disable-bootstrap, the build succeeds and installs OK.

Sadly I have not yet been able to figure out how to pass down -fPIC to the
later bootstrap stages. I've tried BOOT_CFLAGS=fPIC and --enable-pic without
any joy.

Thanks

Reply via email to