On Mon, Aug 17, 2015 at 3:43 PM, Rich Felker <dal...@libc.org> wrote: > On Mon, Aug 17, 2015 at 02:19:34PM -0700, H.J. Lu wrote: >> On Tue, Jun 23, 2015 at 9:18 PM, Rich Felker <dal...@libc.org> wrote: >> > For background on the static PIE model I'm working with, see the >> > following post to the GCC list: >> > >> > https://gcc.gnu.org/ml/gcc/2015-06/msg00008.html >> > >> > So far, I've been prototyping static PIE support by having GCC pass >> > the following options to ld instead of -static -pie: >> > >> > -static -shared -Bsymbolic >> > >> > This partly works, but since ld does not know it's producing a main >> > executable, it misses important details, including the ability to link >> > initial-exec and local-exec model TLS code correctly, as well as >> > various linking optimizations. So I think the right way forward is >> > making ld accept -static and -pie together to do the right thing. >> > >> > In elflink.c, _bfd_elf_link_create_dynamic_sections assumes that >> > executables should always have a .interp section. >> > bfd_elf_size_dynamic_sections asserts this assumption again, and the >> > individual elf??-*.c files also do so in *_elf_size_dynamic_sections >> > where they set a default interpreter. (Is this even useful? Most of >> > the names are out of touch with reality, and GCC always passes an >> > explicit -dynamic-linker anyway, so I think this code should just be >> > removed.) >> > >> > Now I have a working prototype by changing the info->executable >> > condition to info->executable && info->dynamic, and having lexsup.c >> > store the value of input_flags.dynamic in link_info.dynamic after >> > processing the command line, but I'm not sure if this is the right >> > approach. >> >> It is OK to use -static/-Bstatic/-non_shared with -shared and -pie. >> I think you want --no-dynamic-linker. > > Yes, I was concerned someone might say that. I could certainly add a > --no-dynamic-linker option, but then how should it work on the gcc > side? Having to use -Wl,--no-dynamic-linker to get static-pie would be > a significant obstacle to actual usage, I think. The gcc specs could > automatically pass --no-dynamic-linker when -static is passed to gcc, > assuming users who want to do weird mixes of static and dynamic > linking would use -Wl,-Bstatic rather than -static. After all, gcc > needs to know it's asking for static-pie anyway in order to use the > right startfile. Does that seem reasonable?
I think it is seasonable for gcc to pass --no-dynamic-linker to ld when -static is used if ld supports it. -- H.J.