|
@@ -155,16 +155,18 @@ void __uClibc_init(void)
|
|
|
}
|
|
|
|
|
|
#ifdef __UCLIBC_CTOR_DTOR__
|
|
|
-void (*__app_fini)(void) = NULL;
|
|
|
+void attribute_hidden (*__app_fini)(void) = NULL;
|
|
|
#endif
|
|
|
|
|
|
+void attribute_hidden (*__rtld_fini)(void) = NULL;
|
|
|
+
|
|
|
|
|
|
* called from crt0 (version 0.9.16 or newer), after ALL shared libraries
|
|
|
* are initialized, just before we call the application's main function.
|
|
|
*/
|
|
|
void __attribute__ ((__noreturn__))
|
|
|
__uClibc_start_main(int argc, char **argv, char **envp,
|
|
|
- void (*app_init)(void), void (*app_fini)(void))
|
|
|
+ void (*app_init)(void), void (*app_fini)(void), void (*rtld_fini)(void))
|
|
|
{
|
|
|
#ifdef __ARCH_HAS_MMU__
|
|
|
unsigned long *aux_dat;
|
|
@@ -176,6 +178,8 @@ __uClibc_start_main(int argc, char **argv, char **envp,
|
|
|
* __uClibc_init() regardless, to be sure the right thing happens. */
|
|
|
__uClibc_init();
|
|
|
|
|
|
+ __rtld_fini = rtld_fini;
|
|
|
+
|
|
|
|
|
|
if (__environ==NULL) {
|
|
|
|
|
@@ -260,6 +264,6 @@ __uClibc_start_main(int argc, char **argv, char **envp,
|
|
|
void __attribute__ ((__noreturn__))
|
|
|
__uClibc_main(int argc, char **argv, char ** envp)
|
|
|
{
|
|
|
- __uClibc_start_main(argc, argv, envp, NULL, NULL);
|
|
|
+ __uClibc_start_main(argc, argv, envp, NULL, NULL, NULL);
|
|
|
}
|
|
|
|