From d2bb300b9bb7917d33e3bc37fca3bf6ee6e5fcc4 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Mon, 21 Dec 2015 11:49:28 -0500 Subject: Add static instance of _on_exit_args for _REENT_SMALL platforms. 2015-12-21 Freddie Chopin * libc/stdlib/on_exit_args.{c,h}: New files. * libc/stdlib/Makefile.am: Add new source file. * libc/stdlib/Makefile.in: Regenerate. * libc/stdlib/__atexit.c (__register_exitproc): Initialize _on_exit_args_ptr field of _GLOBAL_ATEXIT on first run. * libc/stdlib/on_exit.c: Force linking of static instance of _on_exit_args. * libc/stdlib/cxa_atexit.c: Likewise. --- newlib/libc/stdlib/__atexit.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'newlib/libc/stdlib/__atexit.c') diff --git a/newlib/libc/stdlib/__atexit.c b/newlib/libc/stdlib/__atexit.c index a3d5bdfbf..23eab29a9 100644 --- a/newlib/libc/stdlib/__atexit.c +++ b/newlib/libc/stdlib/__atexit.c @@ -79,7 +79,14 @@ _DEFUN (__register_exitproc, p = _GLOBAL_ATEXIT; if (p == NULL) - _GLOBAL_ATEXIT = p = _GLOBAL_ATEXIT0; + { + _GLOBAL_ATEXIT = p = _GLOBAL_ATEXIT0; +#ifdef _REENT_SMALL + extern struct _on_exit_args * const __on_exit_args _ATTRIBUTE ((weak)); + if (&__on_exit_args != NULL) + p->_on_exit_args_ptr = __on_exit_args; +#endif /* def _REENT_SMALL */ + } if (p->_ind >= _ATEXIT_SIZE) { #ifndef _ATEXIT_DYNAMIC_ALLOC -- cgit v1.2.3