2009-04-23 Paul Brook <paul@codesourcery.com>
Kazu Hirata <kazu@codesourcery.com> * 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.
This commit is contained in:
parent
2beb9fbb02
commit
bbb9d4fde3
@ -1,3 +1,11 @@
|
|||||||
|
2009-04-23 Paul Brook <paul@codesourcery.com>
|
||||||
|
Kazu Hirata <kazu@codesourcery.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2009-04-22 Anthony Green <green@moxielogic.com>
|
2009-04-22 Anthony Green <green@moxielogic.com>
|
||||||
|
|
||||||
* configure.host: Add moxie support.
|
* configure.host: Add moxie support.
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#include <sys/lock.h>
|
#include <sys/lock.h>
|
||||||
#include "atexit.h"
|
#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.
|
* Register a function to be performed at exit or on shared library unload.
|
||||||
@ -38,6 +40,11 @@ _DEFUN (__register_exitproc,
|
|||||||
#ifndef _ATEXIT_DYNAMIC_ALLOC
|
#ifndef _ATEXIT_DYNAMIC_ALLOC
|
||||||
return -1;
|
return -1;
|
||||||
#else
|
#else
|
||||||
|
/* Don't dynamically allocate the atexit array if malloc is not
|
||||||
|
available. */
|
||||||
|
if (!malloc)
|
||||||
|
return -1;
|
||||||
|
|
||||||
p = (struct _atexit *) malloc (sizeof *p);
|
p = (struct _atexit *) malloc (sizeof *p);
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
{
|
{
|
||||||
@ -62,7 +69,9 @@ _DEFUN (__register_exitproc,
|
|||||||
args = p->_on_exit_args_ptr;
|
args = p->_on_exit_args_ptr;
|
||||||
if (args == NULL)
|
if (args == NULL)
|
||||||
{
|
{
|
||||||
|
if (malloc)
|
||||||
args = malloc (sizeof * p->_on_exit_args_ptr);
|
args = malloc (sizeof * p->_on_exit_args_ptr);
|
||||||
|
|
||||||
if (args == NULL)
|
if (args == NULL)
|
||||||
{
|
{
|
||||||
#ifndef __SINGLE_THREAD__
|
#ifndef __SINGLE_THREAD__
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
#include <reent.h>
|
#include <reent.h>
|
||||||
#include "atexit.h"
|
#include "atexit.h"
|
||||||
|
|
||||||
|
/* Make this a weak reference to avoid pulling in free. */
|
||||||
|
void free(void *) _ATTRIBUTE((__weak__));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call registered exit handlers. If D is null then all handlers are called,
|
* Call registered exit handlers. If D is null then all handlers are called,
|
||||||
* otherwise only the handlers from that DSO are called.
|
* otherwise only the handlers from that DSO are called.
|
||||||
@ -76,6 +79,11 @@ _DEFUN (__call_exitprocs, (code, d),
|
|||||||
#ifndef _ATEXIT_DYNAMIC_ALLOC
|
#ifndef _ATEXIT_DYNAMIC_ALLOC
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
|
/* Don't dynamically free the atexit array if free is not
|
||||||
|
available. */
|
||||||
|
if (!free)
|
||||||
|
break;
|
||||||
|
|
||||||
/* Move to the next block. Free empty blocks except the last one,
|
/* Move to the next block. Free empty blocks except the last one,
|
||||||
which is part of _GLOBAL_REENT. */
|
which is part of _GLOBAL_REENT. */
|
||||||
if (p->_ind == 0 && p->_next)
|
if (p->_ind == 0 && p->_next)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user