* acconfig.h (_ATEXIT_DYNAMIC_ALLOC): Undef.

* configure.in (--disable-newlib-atexit-dynamic-alloc): New
	option.
	* configure: Regenerated.
	* newlib.hin: Regenerated.
	* libc/stdlib/__atexit.c (__register_exitproc): Don't call malloc
	if _ATEXIT_DYNAMIC_ALLOC is undefined.
	* libc/stdlib/__call_atexit.c (__call_exitprocs): Don't call free
	if _ATEXIT_DYNAMIC_ALLOC is undefined.
This commit is contained in:
Mark Mitchell
2006-03-21 00:57:34 +00:00
parent c1494e03a2
commit 3078fb4f36
7 changed files with 146 additions and 80 deletions

View File

@ -35,6 +35,9 @@ _DEFUN (__register_exitproc,
_GLOBAL_REENT->_atexit = p = &_GLOBAL_REENT->_atexit0;
if (p->_ind >= _ATEXIT_SIZE)
{
#ifndef _ATEXIT_DYNAMIC_ALLOC
return -1;
#else
p = (struct _atexit *) malloc (sizeof *p);
if (p == NULL)
{
@ -49,6 +52,7 @@ _DEFUN (__register_exitproc,
#ifndef _REENT_SMALL
p->_on_exit_args._fntypes = 0;
p->_on_exit_args._is_cxa = 0;
#endif
#endif
}

View File

@ -61,6 +61,9 @@ _DEFUN (__call_exitprocs, (code, d),
(*((void (*)(_PTR)) fn))(args->_fnargs[n]);
}
#ifndef _ATEXIT_DYNAMIC_ALLOC
break;
#else
/* Move to the next block. Free empty blocks except the last one,
which is part of _GLOBAL_REENT. */
if (p->_ind == 0 && p->_next)
@ -79,5 +82,6 @@ _DEFUN (__call_exitprocs, (code, d),
lastp = &p->_next;
p = p->_next;
}
#endif
}
}