/* GNU Objective C Runtime Miscellaneous
- Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
-
-Author: Kresten Krab Thorup
+ Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
+ Contrbuted by Kresten Krab Thorup
This file is part of GNU CC.
however invalidate any other reasons why the executable file might be
covered by the GNU General Public License. */
-#ifdef __alpha__
#include <stdlib.h>
+
+#ifdef __alpha__
extern int write (int, const char*, int);
extern size_t strlen (const char*);
#endif
abort();
}
-void*
-__objc_xmalloc(size_t size)
+/*
+** Standard functions for memory allocation and disposal.
+** Users should use these functions in their ObjC programs so
+** that they work properly with garbage collectors as well as
+** can take advantage of the exception/error handling available.
+*/
+
+void *
+objc_malloc(size_t size)
+{
+ void* res = (void*) (*_objc_malloc)(size);
+ if(!res)
+ objc_fatal("Virtual memory exhausted\n");
+ return res;
+}
+
+void *
+objc_atomic_malloc(size_t size)
{
- void* res = (void*) malloc(size);
+ void* res = (void*) (*_objc_atomic_malloc)(size);
if(!res)
objc_fatal("Virtual memory exhausted\n");
return res;
}
-void*
-__objc_xrealloc(void* mem, size_t size)
+void *
+objc_valloc(size_t size)
{
- void* res = (void*) realloc(mem, size);
+ void* res = (void*) (*_objc_valloc)(size);
if(!res)
objc_fatal("Virtual memory exhausted\n");
return res;
}
-void*
-__objc_xcalloc(size_t nelem, size_t size)
+void *
+objc_realloc(void *mem, size_t size)
{
- void* res = (void*)calloc(nelem, size);
+ void* res = (void*) (*_objc_realloc)(mem, size);
if(!res)
objc_fatal("Virtual memory exhausted\n");
return res;
}
+
+void *
+objc_calloc(size_t nelem, size_t size)
+{
+ void* res = (void*) (*_objc_calloc)(nelem, size);
+ if(!res)
+ objc_fatal("Virtual memory exhausted\n");
+ return res;
+}
+
+void
+objc_free(void *mem)
+{
+ (*_objc_free)(mem);
+}
+
+/*
+** Hook functions for memory allocation and disposal.
+** This makes it easy to substitute garbage collection systems
+** such as Boehm's GC by assigning these function pointers
+** to the GC's allocation routines. By default these point
+** to the ANSI standard malloc, realloc, free, etc.
+**
+** Users should call the normal objc routines above for
+** memory allocation and disposal within their programs.
+*/
+void *(*_objc_malloc)(size_t) = malloc;
+void *(*_objc_atomic_malloc)(size_t) = malloc;
+void *(*_objc_valloc)(size_t) = malloc;
+void *(*_objc_realloc)(void *, size_t) = realloc;
+void *(*_objc_calloc)(size_t, size_t) = calloc;
+void (*_objc_free)(void *) = free;