* 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:
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user