author | Rich Felker <dalias@aerifal.cx> | 2012年11月30日 17:56:23 -0500 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012年11月30日 17:56:23 -0500 |
commit | a7936f61b23100ac32f51776c5b3e52452c7598c (patch) | |
tree | f389101a0cd75932cf5b027d99d49e38233eabe7 | |
parent | 1c322f2f0a9173a3ae8c8bfa12d5d8e92fb5d0ab (diff) | |
download | musl-a7936f61b23100ac32f51776c5b3e52452c7598c.tar.gz |
-rw-r--r-- | src/env/__libc_start_main.c | 5 | ||||
-rw-r--r-- | src/ldso/dynlink.c | 9 |
diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c index ee10b0de..04a454e8 100644 --- a/src/env/__libc_start_main.c +++ b/src/env/__libc_start_main.c @@ -3,6 +3,7 @@ void __init_tls(size_t *); void __init_security(size_t *); +void __init_ldso_ctors(void); #define AUX_CNT 38 @@ -37,6 +38,10 @@ int __libc_start_main( /* Execute constructors (static) linked into the application */ if (init) init(argc, argv, envp); +#ifdef SHARED + __init_ldso_ctors(); +#endif + /* Pass control to to application */ exit(main(argc, argv, envp)); return 0; diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index c436b88f..d564b8f2 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -999,13 +999,16 @@ void *__dynlink(int argc, char **argv) if (ssp_used) __init_ssp((void *)aux[AT_RANDOM]); - atexit(do_fini); - do_init_fini(tail); - errno = 0; return (void *)aux[AT_ENTRY]; } +void __init_ldso_ctors(void) +{ + atexit(do_fini); + do_init_fini(tail); +} + void *dlopen(const char *file, int mode) { struct dso *volatile p, *orig_tail, *next; |