summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/env/__libc_start_main.c3
-rw-r--r--src/ldso/dynlink.c6
2 files changed, 8 insertions, 1 deletions
diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c
index f6f3b14a..d1f6a5e1 100644
--- a/src/env/__libc_start_main.c
+++ b/src/env/__libc_start_main.c
@@ -67,6 +67,9 @@ int __libc_start_main(int (*main)(int,char **,char **), int argc, char **argv)
uintptr_t a = (uintptr_t)&__init_array_start;
for (; a<(uintptr_t)&__init_array_end; a+=sizeof(void(*)()))
(*(void (**)())a)();
+#else
+ void __libc_start_init(void);
+ __libc_start_init();
#endif
/* Pass control to the application */
diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c
index 8967505a..f144aa59 100644
--- a/src/ldso/dynlink.c
+++ b/src/ldso/dynlink.c
@@ -1203,6 +1203,11 @@ static void do_init_fini(struct dso *p)
if (need_locking) pthread_mutex_unlock(&init_fini_lock);
}
+void __libc_start_init(void)
+{
+ do_init_fini(tail);
+}
+
static void dl_debug_state(void)
{
}
@@ -1630,7 +1635,6 @@ _Noreturn void __dls3(size_t *sp)
__init_libc(envp, argv[0]);
atexit(do_fini);
errno = 0;
- do_init_fini(tail);
CRTJMP((void *)aux[AT_ENTRY], argv-1);
for(;;);