diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2013-05-07 21:40:10 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2013-05-07 21:40:10 +0000 |
commit | 6bd6954bdc0f3fc4c952f8066e939f16c69bf13b (patch) | |
tree | 0ed52e48761e3323a0e86ec91544cc10ffbcc694 /newlib/libc/include/sys/reent.h | |
parent | c0e447afd0d4b671fb55948c4cdb4bee543d0b50 (diff) | |
download | cygnal-6bd6954bdc0f3fc4c952f8066e939f16c69bf13b.tar.gz cygnal-6bd6954bdc0f3fc4c952f8066e939f16c69bf13b.tar.bz2 cygnal-6bd6954bdc0f3fc4c952f8066e939f16c69bf13b.zip |
2013-05-07 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libc/include/sys/reent.h (_ATEXIT_INIT): Define.
(_ATEXIT_INIT_PTR): Likewise.
(_REENT_INIT_ATEXIT): Likewise.
(_REENT_INIT_ATEXIT_PTR): Likewise.
(_GLOBAL_ATEXIT): Likewise.
* libc/stdlib/__atexit.c (_GLOBAL_ATEXIT0): Define.
(__register_exitproc): Use _GLOBAL_ATEXIT and _GLOBAL_ATEXIT0.
* libc/stdlib/__call_atexit.c (__call_exitprocs): Likewise.
-
Diffstat (limited to 'newlib/libc/include/sys/reent.h')
-rw-r--r-- | newlib/libc/include/sys/reent.h | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h index ff0242eae..8b78f5bc8 100644 --- a/newlib/libc/include/sys/reent.h +++ b/newlib/libc/include/sys/reent.h @@ -85,6 +85,12 @@ struct _atexit { void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */ struct _on_exit_args * _on_exit_args_ptr; }; +# define _ATEXIT_INIT {_NULL, 0, {_NULL}, _NULL} +# define _ATEXIT_INIT_PTR(var) \ + (var)->_next = _NULL; \ + (var)->_ind = 0; \ + (var)->_fns[0] = _NULL; \ + (var)->_on_exit_args_ptr = _NULL #else struct _atexit { struct _atexit *_next; /* next in list */ @@ -93,8 +99,20 @@ struct _atexit { void (*_fns[_ATEXIT_SIZE])(void); /* the table itself */ struct _on_exit_args _on_exit_args; }; +# define _ATEXIT_INIT {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}} +# define _ATEXIT_INIT_PTR(var) \ + (var)->_next = _NULL; \ + (var)->_ind = 0; \ + (var)->_fns[0] = _NULL; \ + (var)->_on_exit_args._fntypes = 0; \ + (var)->_on_exit_args._fnargs[0] = _NULL #endif +#define _REENT_INIT_ATEXIT \ + _NULL, _ATEXIT_INIT, +#define _REENT_INIT_ATEXIT_PTR(var, var0) \ + (var)->_atexit = _NULL; _ATEXIT_INIT_PTR(var0); + /* * Stdio buffers. * @@ -425,8 +443,7 @@ extern const struct __sFILE_fake __sf_fake_stderr; _NULL, \ _NULL, \ _NULL, \ - _NULL, \ - {_NULL, 0, {_NULL}, _NULL}, \ + _REENT_INIT_ATEXIT \ {_NULL, 0, _NULL}, \ _NULL, \ _NULL, \ @@ -452,11 +469,7 @@ extern const struct __sFILE_fake __sf_fake_stderr; (var)->_localtime_buf = _NULL; \ (var)->_asctime_buf = _NULL; \ (var)->_sig_func = _NULL; \ - (var)->_atexit = _NULL; \ - (var)->_atexit0._next = _NULL; \ - (var)->_atexit0._ind = 0; \ - (var)->_atexit0._fns[0] = _NULL; \ - (var)->_atexit0._on_exit_args_ptr = _NULL; \ + _REENT_INIT_ATEXIT_PTR(var, &(var)->_atexit0) \ (var)->__sglue._next = _NULL; \ (var)->__sglue._niobs = 0; \ (var)->__sglue._iobs = _NULL; \ @@ -698,8 +711,7 @@ struct _reent {0, {0}} \ } \ }, \ - _NULL, \ - {_NULL, 0, {_NULL}, {{_NULL}, {_NULL}, 0, 0}}, \ + _REENT_INIT_ATEXIT \ _NULL, \ {_NULL, 0, _NULL} \ } @@ -791,6 +803,8 @@ void _reclaim_reent _PARAMS ((struct _reent *)); #define _GLOBAL_REENT _global_impure_ptr +#define _GLOBAL_ATEXIT (_GLOBAL_REENT->_atexit) + #ifdef __cplusplus } #endif |