diff options
-rw-r--r-- | src/env/__libc_start_main.c | 3 | ||||
-rw-r--r-- | src/ldso/dynlink.c | 6 |
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(;;); |