(objc_malloc): Renamed from __objc_xmalloc.
authorRichard Kenner <kenner@gcc.gnu.org>
Sun, 22 Sep 1996 14:35:45 +0000 (10:35 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Sun, 22 Sep 1996 14:35:45 +0000 (10:35 -0400)
(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

gcc/objc/misc.c

index 033018ed48496c2a53552d9b958ff1302dac8b95..ec58d9d4e8b72fefd8317680db3ef9975ae6877b 100644 (file)
@@ -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;