From d6a72fff81fd3a9e042346d6e958aaf455e2447d Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 29 Nov 2010 14:14:27 +0000 Subject: 2010-11-29 Sebastian Huber * libcsupport/src/newlibc_exit.c, score/src/threadhandler.c: Added support for .preinit_array, .init_array and .fini_array sections. --- cpukit/libcsupport/src/newlibc_exit.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'cpukit/libcsupport') diff --git a/cpukit/libcsupport/src/newlibc_exit.c b/cpukit/libcsupport/src/newlibc_exit.c index 818ba884f4..3cf602d62e 100644 --- a/cpukit/libcsupport/src/newlibc_exit.c +++ b/cpukit/libcsupport/src/newlibc_exit.c @@ -118,10 +118,13 @@ void libc_wrapup(void) */ #include +#include -/* FIXME: These defines are a blatant hack */ - #define EXIT_SYMBOL _exit +#if defined(HAVE_INITFINI_ARRAY) + extern void __libc_fini_array(void); +#endif +/* FIXME: These defines are a blatant hack */ #if defined(__AVR__) #undef __USE_INIT_FINI__ #endif @@ -135,8 +138,22 @@ void libc_wrapup(void) extern void FINI_SYMBOL( void ); #endif -void EXIT_SYMBOL(int status) +void _exit(int status) { + #if defined(HAVE_INITFINI_ARRAY) + /* + * According to + * + * System V Application Binary Interface + * Chapter 5 + * Initialization and Termination Functions + * + * we have to call the functions referenced by the .fini_array before the + * one referenced by the .fini section. + */ + __libc_fini_array(); + #endif + /* * If the toolset uses init/fini sections, then we need to * run the global destructors now. -- cgit v1.2.3