From bbb9d4fde31f44a70a6fb42181dc86cb91791d7e Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Thu, 23 Apr 2009 17:54:22 +0000 Subject: 2009-04-23 Paul Brook Kazu Hirata * libc/stdlib/__atexit.c (__register_exitproc): Use weak reference to malloc. Allocate dynamically only if it is present. * libc/stdlib/__call_atexit.c (__call_exitprocs): Use weak reference to free. Call free only if it is present. --- newlib/libc/stdlib/__atexit.c | 11 ++++++++++- 1 file changed, 10 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 49eebb37e..4f0b67c9e 100644 --- a/newlib/libc/stdlib/__atexit.c +++ b/newlib/libc/stdlib/__atexit.c @@ -8,6 +8,8 @@ #include #include "atexit.h" +/* Make this a weak reference to avoid pulling in malloc. */ +void * malloc(size_t) _ATTRIBUTE((__weak__)); /* * Register a function to be performed at exit or on shared library unload. @@ -38,6 +40,11 @@ _DEFUN (__register_exitproc, #ifndef _ATEXIT_DYNAMIC_ALLOC return -1; #else + /* Don't dynamically allocate the atexit array if malloc is not + available. */ + if (!malloc) + return -1; + p = (struct _atexit *) malloc (sizeof *p); if (p == NULL) { @@ -62,7 +69,9 @@ _DEFUN (__register_exitproc, args = p->_on_exit_args_ptr; if (args == NULL) { - args = malloc (sizeof * p->_on_exit_args_ptr); + if (malloc) + args = malloc (sizeof * p->_on_exit_args_ptr); + if (args == NULL) { #ifndef __SINGLE_THREAD__ -- cgit v1.2.3