On Wed, 17 Aug 2016, Mark Kettenis wrote: ... > Functions listed by DT_PREINIT_ARRAY get run immediately after ld.so has > finished loading and relocating all shared objects. This happens only > for the main executable.
The _dl_call_init() invocation in dlopen() needs to change too, or dlopen() will call preinit functions in the requested object, no? > There is a functional change here. Our current ld.so doesn't run > DT_INIT and DT_FINI for the main executable. The ELF standard is a bit > ambiguous about this, but Linux does run tose for the main executable. > And Solaris allegedly does as well. So my diff changes that. ld.so doesn't run them because __start() in csu does! Note that csu needs to run them for static executables, and we use the same crt0.o for both static and dynamic executables. I think you're double executing them with this. (There are _some_ regress tests for this, but we'll want to add more for the {init,fini,preinit}array additions.) Philip Guenther