From 0c8593cf11a16ca75c72977a6f5e3983896940c4 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Thu, 9 Sep 2004 19:46:54 +0000 Subject: 2004-09-09 Paul Brook * libc/include/sys/reent.h (struct _on_exit_args): Add _dso_handle and _is_cxa. (struct _atexit): Add _next when _REENT_SMALL. (struct _reent): Add _atexit0 when _REENT_SMALL. (_REENT_INIT_PTR): Adjust. * libc/stdlib/Makefile.am (GENERAL_SOURCES): Add __atexit.c and __call_exit.c. (EXTENDED_SOURCES): Add cxa_atexit.c and cxa_finalize.c. * libc/stdlib/Makefile.in: Regenerate. * libc/stdlib/__atexit.c: New file. * libc/stdlib/__call_atexit.c: New file. * libc/stdlib/atexit.h: Remove old definitions. Add new. * libc/stdlib/atexit.c (atexit): Use __register_exitproc. * libc/stdlib/cxa_atexit.c: New file. * libc/stdlib/cxa_finalize.c: New file. * libc/stdlib/exit.c (exit): Use __call_exitprocs. * libc/stdlib/on_exit.c (on_exit): Use __register_exitproc. 2004-09-09 Jeff Johnston * libc/reent/reent.c [_REENT_SMALL]: Fix reference to _on_exit_args_ptr. --- newlib/libc/stdlib/exit.c | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-) (limited to 'newlib/libc/stdlib/exit.c') diff --git a/newlib/libc/stdlib/exit.c b/newlib/libc/stdlib/exit.c index be96488c8..b5ef05f5b 100644 --- a/newlib/libc/stdlib/exit.c +++ b/newlib/libc/stdlib/exit.c @@ -48,6 +48,7 @@ Supporting OS subroutines required: <<_exit>>. #include #include /* for _exit() declaration */ #include +#include "atexit.h" #ifndef _REENT_ONLY @@ -59,43 +60,7 @@ void _DEFUN (exit, (code), int code) { - register struct _atexit *p; - register struct _on_exit_args * args; - register int n; - int i; - -#ifdef _REENT_SMALL - p = &_GLOBAL_REENT->_atexit; - args = p->_on_exit_args_ptr; - - if (args == NULL) - { - for (n = p->_ind; n--;) - p->_fns[n] (); - } - else - { - for (n = p->_ind - 1, i = (n >= 0) ? (1 << n) : 0; n >= 0; --n, i >>= 1) - if (args->_fntypes & i) - (*((void (*)(int, void *)) p->_fns[n]))(code, args->_fnargs[n]); - else - p->_fns[n] (); - } -#else - p = _GLOBAL_REENT->_atexit; - while (p) - { - args = & p->_on_exit_args; - - for (n = p->_ind - 1, i = (n >= 0) ? (1 << n) : 0; n >= 0; --n, i >>= 1) - if (args->_fntypes & i) - (*((void (*)(int, void *)) p->_fns[n]))(code, args->_fnargs[n]); - else - p->_fns[n] (); - - p = p->_next; - } -#endif + __call_exitprocs (code, NULL); if (_GLOBAL_REENT->__cleanup) (*_GLOBAL_REENT->__cleanup) (_GLOBAL_REENT); -- cgit v1.2.3