diff options
| -rw-r--r-- | src/env/__libc_start_main.c | 5 | ||||
| -rw-r--r-- | src/ldso/dynlink.c | 9 | 
2 files changed, 11 insertions, 3 deletions
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;  | 
