On Tue, Jul 18, 2017 at 7:09 AM, Alan Modra <amo...@gmail.com> wrote: > On Tue, Jul 18, 2017 at 05:36:49AM -0700, H.J. Lu wrote: >> I am working on compiling libc.a in glibc with -fPIE and building static >> PIE. This creates static executable with PIE: >> >> gcc -nostdlib -nostartfiles -static -o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/elf/sln -pie >> -Wl,--no-dynamic-linker >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crt1.o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crti.o `gcc >> --print-file-name=crtbeginS.o` >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/elf/sln.o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/elf/static-stubs.o >> -Wl,--start-group >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/libc.a -lgcc >> -Wl,--end-group `gcc --print-file-name=crtendS.o` >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crtn.o >> >> Currently, it only works with gcc configured with -disable-default-pie. >> With --enable-default-pie, I got >> >> [hjl@gnu-tools-1 build-x86_64-linux]$ /usr/gcc-7.1.1-x32-pie/bin/gcc >> -nostdlib -nostartfiles -static -o /tmp/sln -pie >> -Wl,--no-dynamic-linker >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crt1.o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crti.o `gcc >> --print-file-name=crtbeginS.o` >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/elf/sln.o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/elf/static-stubs.o >> -Wl,--start-group >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/libc.a -lgcc >> -Wl,--end-group `gcc --print-file-name=crtendS.o` >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/csu/crtn.o >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/libc.a(dl-support.o): >> In function `elf_machine_load_address': >> /export/gnu/import/git/sources/glibc/elf/../sysdeps/x86_64/dl-machine.h:59: >> undefined reference to `_DYNAMIC' >> /export/build/gnu/glibc-static-pie/build-x86_64-linux/libc.a(dl-support.o): >> In function `elf_get_dynamic_info': >> /export/gnu/import/git/sources/glibc/elf/get-dynamic-info.h:48: >> undefined reference to `_DYNAMIC' >> collect2: error: ld returned 1 exit status >> [hjl@gnu-tools-1 build-x86_64-linux]$ >> >> Will your change fix it? > > You have got to be joking! How should I know whether something will > work with some hare-brained scheme of yours? One that seemingly > requires you to specify startup files by hand! >
The difference is with --enable-default-pie, the gcc driver doesn't pass both -pie and -static ld when "-static -pie" is used. Does your change pass both -pie and -static ld when "-static -pie" is used? -- H.J.