aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc/misc.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-09-22 10:35:45 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-09-22 10:35:45 -0400
commit79236a0da5f94524f06a7175027c2dee82681384 (patch)
treeae0726d54b98c97e0a94fe1640564ddc975ad560 /gcc/objc/misc.c
parent9d46282b6cde36acb5b40a9d8c60a530de0e1328 (diff)
downloadgcc-79236a0da5f94524f06a7175027c2dee82681384.zip
gcc-79236a0da5f94524f06a7175027c2dee82681384.tar.gz
gcc-79236a0da5f94524f06a7175027c2dee82681384.tar.bz2
(objc_malloc): Renamed from __objc_xmalloc.
(objc_realloc): Renamed from __objc_realloc. (objc_atomic_malloc): New function. (objc_valloc): New function. (objc_calloc): Renamed from __objc_calloc. (objc_free): New function. From-SVN: r12763
Diffstat (limited to 'gcc/objc/misc.c')
-rw-r--r--gcc/objc/misc.c74
1 files changed, 61 insertions, 13 deletions
diff --git a/gcc/objc/misc.c b/gcc/objc/misc.c
index 033018e..ec58d9d 100644
--- a/gcc/objc/misc.c
+++ b/gcc/objc/misc.c
@@ -1,7 +1,6 @@
/* 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.
@@ -26,8 +25,9 @@ Boston, MA 02111-1307, USA. */
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
@@ -52,29 +52,77 @@ objc_fatal(const char* msg)
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;