diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2004-09-09 19:46:54 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2004-09-09 19:46:54 +0000 |
commit | 0c8593cf11a16ca75c72977a6f5e3983896940c4 (patch) | |
tree | 8133764892ae91831d48980ef216fc4935e45b5f /newlib/libc/stdlib/atexit.c | |
parent | 582dde69f31fb0dbe4beca5461b2b08924ae4e20 (diff) | |
download | newlib-0c8593cf11a16ca75c72977a6f5e3983896940c4.zip newlib-0c8593cf11a16ca75c72977a6f5e3983896940c4.tar.gz newlib-0c8593cf11a16ca75c72977a6f5e3983896940c4.tar.bz2 |
2004-09-09 Paul Brook <paul@codesourcery.com>
* 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 <jjohnstn@redhat.com>
* libc/reent/reent.c [_REENT_SMALL]: Fix reference to
_on_exit_args_ptr.
Diffstat (limited to 'newlib/libc/stdlib/atexit.c')
-rw-r--r-- | newlib/libc/stdlib/atexit.c | 46 |
1 files changed, 2 insertions, 44 deletions
diff --git a/newlib/libc/stdlib/atexit.c b/newlib/libc/stdlib/atexit.c index 3a9cdc6..21ffd6e 100644 --- a/newlib/libc/stdlib/atexit.c +++ b/newlib/libc/stdlib/atexit.c @@ -50,10 +50,8 @@ Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, <<lseek>>, <<read>>, <<sbrk>>, <<write>>. */ -#include <stddef.h> #include <stdlib.h> -#include <reent.h> -#include <sys/lock.h> +#include "atexit.h" /* * Register a function to be performed at exit. @@ -64,45 +62,5 @@ _DEFUN (atexit, (fn), _VOID _EXFUN ((*fn), (_VOID))) { - register struct _atexit *p; - -#ifndef __SINGLE_THREAD__ - __LOCK_INIT(static, lock); - - __lock_acquire(lock); -#endif - - /* _REENT_SMALL atexit() doesn't allow more than the required 32 entries. */ -#ifndef _REENT_SMALL - if ((p = _GLOBAL_REENT->_atexit) == NULL) - _GLOBAL_REENT->_atexit = p = &_GLOBAL_REENT->_atexit0; - if (p->_ind >= _ATEXIT_SIZE) - { - if ((p = (struct _atexit *) malloc (sizeof *p)) == NULL) - { -#ifndef __SINGLE_THREAD__ - __lock_release(lock); -#endif - return -1; - } - p->_ind = 0; - p->_on_exit_args._fntypes = 0; - p->_next = _GLOBAL_REENT->_atexit; - _GLOBAL_REENT->_atexit = p; - } -#else - p = &_GLOBAL_REENT->_atexit; - if (p->_ind >= _ATEXIT_SIZE) - { -#ifndef __SINGLE_THREAD__ - __lock_release(lock); -#endif - return -1; - } -#endif - p->_fns[p->_ind++] = fn; -#ifndef __SINGLE_THREAD__ - __lock_release(lock); -#endif - return 0; + return __register_exitproc (__et_atexit, fn, NULL, NULL); } |