[PATCH] Fix pr80044, -static and -pie insanity, and pr81170

Alan Modra amodra@gmail.com
Tue Jul 18 14:10:00 GMT 2017


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!

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Gcc-patches mailing list