https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70258
Bug ID: 70258 Summary: -fPIE isn't passed to lto by default when GCC is configured with --enable-default-pie Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: lto Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- When GCC is configured with --enable-default-pie, I got [hjl@gnu-skl-1 gcc]$ /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/ -fno-diagnostics-show-caret -fdiagnostics-color=never -O0 -flto -flto-partition=none -fuse-linker-plugin -c -o c_lto_20081024_0.o /export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.dg/lto/20081024_0.c [hjl@gnu-skl-1 gcc]$ /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/ c_lto_20081024_0.o -fno-diagnostics-show-caret -fdiagnostics-color=never -O0 -flto -flto-partition=none -fuse-linker-plugin -o gcc-dg-lto-20081024-01.exe -v Reading specs from /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/specs COLLECT_GCC=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/xgcc COLLECT_LTO_WRAPPER=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: /export/gnu/import/git/sources/gcc/configure --enable-languages=c,c++ --disable-bootstrap --disable-libcc1 --disable-libcilkrts --disable-libsanitizer --disable-libmpx --prefix=/usr/gcc-6.0.0 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-default-pie --with-fpmath=sse Thread model: posix gcc version 6.0.0 20160316 (experimental) (GCC) COMPILER_PATH=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/ LIBRARY_PATH=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/:/lib/../lib64/:/usr/lib/../lib64/:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-fdiagnostics-color=never' '-B' '/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/' '-fno-diagnostics-show-caret' '-O0' '-flto' '-flto-partition=none' '-fuse-linker-plugin' '-o' 'gcc-dg-lto-20081024-01.exe' '-v' '-mtune=generic' '-march=x86-64' /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/collect2 -plugin /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/liblto_plugin.so -plugin-opt=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/lto-wrapper -plugin-opt=-fresolution=/tmp/ccfxn1F0.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -flto --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o gcc-dg-lto-20081024-01.exe /lib/../lib64/Scrt1.o /lib/../lib64/crti.o /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/crtbeginS.o -L/export/build/gnu/gcc-pie/build-x86_64-linux/gcc -L/lib/../lib64 -L/usr/lib/../lib64 c_lto_20081024_0.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/crtendS.o /lib/../lib64/crtn.o /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/xgcc @/tmp/cc5z5itP Reading specs from /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/specs COLLECT_GCC=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/xgcc Target: x86_64-pc-linux-gnu Configured with: /export/gnu/import/git/sources/gcc/configure --enable-languages=c,c++ --disable-bootstrap --disable-libcc1 --disable-libcilkrts --disable-libsanitizer --disable-libmpx --prefix=/usr/gcc-6.0.0 --with-local-prefix=/usr/local --enable-gnu-indirect-function --enable-clocale=gnu --with-system-zlib --enable-default-pie --with-fpmath=sse Thread model: posix gcc version 6.0.0 20160316 (experimental) (GCC) COLLECT_GCC_OPTIONS='-fdiagnostics-color=never' '-c' '-fmath-errno' '-fsigned-zeros' '-ftrapping-math' '-fno-trapv' '-fno-strict-overflow' '-fno-openmp' '-fno-openacc' '-mtune=generic' '-march=x86-64' '-O0' '-B' '/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/' '-fno-diagnostics-show-caret' '-O0' '-flto-partition=none' '-fuse-linker-plugin' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' './' '-dumpbase' 'gcc-dg-lto-20081024-01.exe' '-o' '/tmp/ccxq1b5Z.lto.o' '-fresolution=/tmp/ccfxn1F0.res' '-flinker-output=pie' /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/lto1 -quiet -dumpdir ./ -dumpbase gcc-dg-lto-20081024-01.exe -mtune=generic -march=x86-64 -mtune=generic -march=x86-64 -auxbase-strip /tmp/ccxq1b5Z.lto.o -O0 -O0 -version -fdiagnostics-color=never -fmath-errno -fsigned-zeros -ftrapping-math -fno-trapv -fno-strict-overflow -fno-openmp -fno-openacc -fno-diagnostics-show-caret -flto-partition=none -fuse-linker-plugin -fresolution=/tmp/ccfxn1F0.res -flinker-output=pie @/tmp/cc40jC1Z -o /tmp/ccXhR3pP.s GNU GIMPLE (GCC) version 6.0.0 20160316 (experimental) (x86_64-pc-linux-gnu) compiled by GNU C version 5.3.1 20160212 (Red Hat 5.3.1-4), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.2, isl version 0.14 or 0.13 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 GNU GIMPLE (GCC) version 6.0.0 20160316 (experimental) (x86_64-pc-linux-gnu) compiled by GNU C version 5.3.1 20160212 (Red Hat 5.3.1-4), GMP version 6.0.0, MPFR version 3.1.3, MPC version 1.0.2, isl version 0.14 or 0.13 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 COLLECT_GCC_OPTIONS='-fdiagnostics-color=never' '-c' '-fmath-errno' '-fsigned-zeros' '-ftrapping-math' '-fno-trapv' '-fno-strict-overflow' '-fno-openmp' '-fno-openacc' '-mtune=generic' '-march=x86-64' '-O0' '-B' '/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/' '-fno-diagnostics-show-caret' '-O0' '-flto-partition=none' '-fuse-linker-plugin' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' './' '-dumpbase' 'gcc-dg-lto-20081024-01.exe' '-o' '/tmp/ccxq1b5Z.lto.o' '-fresolution=/tmp/ccfxn1F0.res' '-flinker-output=pie' /export/build/gnu/gcc-pie/build-x86_64-linux/gcc/as -v --64 -o /tmp/ccxq1b5Z.lto.o /tmp/ccXhR3pP.s GNU assembler version 2.26.51.0.2 (x86_64-pc-linux-gnu) using BFD version (Linux/GNU Binutils) 2.26.51.0.2.20160316 COMPILER_PATH=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/:/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/ LIBRARY_PATH=/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/:/lib/../lib64/../lib64/:/usr/lib/../lib64/../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/:/lib/../lib64/:/usr/lib/../lib64/:/lib/:/usr/lib/:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-fdiagnostics-color=never' '-c' '-fmath-errno' '-fsigned-zeros' '-ftrapping-math' '-fno-trapv' '-fno-strict-overflow' '-fno-openmp' '-fno-openacc' '-mtune=generic' '-march=x86-64' '-O0' '-B' '/export/build/gnu/gcc-pie/build-x86_64-linux/gcc/' '-fno-diagnostics-show-caret' '-O0' '-flto-partition=none' '-fuse-linker-plugin' '-v' '-mtune=generic' '-march=x86-64' '-dumpdir' './' '-dumpbase' 'gcc-dg-lto-20081024-01.exe' '-o' '/tmp/ccxq1b5Z.lto.o' '-fresolution=/tmp/ccfxn1F0.res' '-flinker-output=pie' /usr/local/bin/ld: /tmp/ccxq1b5Z.lto.o: relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompile with -fPIC /tmp/ccxq1b5Z.lto.o: error adding symbols: Bad value collect2: error: ld returned 1 exit status [hjl@gnu-skl-1 gcc]$ The problem is -fPIE isn't passed to lto.