aboutsummaryrefslogtreecommitdiff
path: root/gcc/objc/misc.c
diff options
context:
space:
mode:
authorOvidiu Predescu <ovidiu@aracnet.com>1998-09-02 23:48:01 +0000
committerJeff Law <law@gcc.gnu.org>1998-09-02 17:48:01 -0600
commitd8bb17c8e33975277dd5231e190bf99451b7025d (patch)
tree1c3b607110323b831606c2ec27d39a0f292a1a15 /gcc/objc/misc.c
parentd636ae0b801758df397e3e1ee790ed041a48b9f9 (diff)
downloadgcc-d8bb17c8e33975277dd5231e190bf99451b7025d.zip
gcc-d8bb17c8e33975277dd5231e190bf99451b7025d.tar.gz
gcc-d8bb17c8e33975277dd5231e190bf99451b7025d.tar.bz2
Boehm GC support for ObjC from Ovidiu Predescu.
From-SVN: r22199
Diffstat (limited to 'gcc/objc/misc.c')
-rw-r--r--gcc/objc/misc.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/gcc/objc/misc.c b/gcc/objc/misc.c
index 8fc8a3f..7339888 100644
--- a/gcc/objc/misc.c
+++ b/gcc/objc/misc.c
@@ -1,6 +1,6 @@
/* GNU Objective C Runtime Miscellaneous
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
- Contrbuted by Kresten Krab Thorup
+ Contributed by Kresten Krab Thorup
This file is part of GNU CC.
@@ -144,9 +144,37 @@ objc_free(void *mem)
** Users should call the normal objc routines above for
** memory allocation and disposal within their programs.
*/
+
+#if OBJC_WITH_GC
+#include <gc.h>
+
+static void *GC_calloc (size_t nelem, size_t size)
+{
+ void* p = GC_malloc (nelem * size);
+ if (!p)
+ objc_error (nil, OBJC_ERR_MEMORY, "Virtual memory exhausted!\n");
+
+ memset (p, 0, nelem * size);
+ return p;
+}
+
+static void noFree (void* p) {}
+
+void *(*_objc_malloc)(size_t) = GC_malloc;
+void *(*_objc_atomic_malloc)(size_t) = GC_malloc_atomic;
+void *(*_objc_valloc)(size_t) = GC_malloc;
+void *(*_objc_realloc)(void *, size_t) = GC_realloc;
+void *(*_objc_calloc)(size_t, size_t) = GC_calloc;
+void (*_objc_free)(void *) = noFree;
+
+#else
+
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;
+
+
+#endif