In article <20150607170425.ge67...@nordend.local.sourire.ch>,
 <rhin...@epost.ch> wrote:
>
>However, when compiled statically the link stage fails (as you can see).
>--------------------------------------------------------------------
>virtualisation# cc -fpie -Wl,-pie -Wl,-static -fPIC testASLR.c
>ld: /usr/lib/libc.a(tls.o): relocation R_X86_64_32 against `.rodata'
>can not be used when making a shared object; recompile with -fPIC
>/usr/lib/libc.a: could not read symbols: Bad value
>--------------------------------------------------------------------
>
>Is it possible to compile a program fully statically and use PIE?

Yes, but...

$ cc -static -Wl,-I/libexec/ld.elf_so -fpie -Wl,-pie pie.c -lc_pic

1. Our specs are broken for static and you need to explicitly specify
   the interpreter
2. You need to link against the pic version of libc

$ file ./a.out
./a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically 
linked, interpreter /libexec/ld.elf_so, for NetBSD 7.99.16, not stripped

And it is not a "statically linked" binary.

$ ldd ./a.out
./a.out:

But it does not depend on any shared libraries, other than the dynamic
linker itself...

christos

Reply via email to