boehm-gc: revert all CACAO-specific modifications; this is now an exact copy of the...
[cacao.git] / src / mm / boehm-gc / include / gc_gcj.h
index 699ddf5d48bd42429e56857dff5b103d9bf7c1cd..9bce311d539cb3729e4e5ef230af99fb50269500 100644 (file)
@@ -14,8 +14,7 @@
  * modified is included with the above copyright notice.
  */
 
-/* This file assumes the collector has been compiled with GC_GCJ_SUPPORT */
-/* and that an ANSI C compiler is available.                            */
+/* This file assumes the collector has been compiled with GC_GCJ_SUPPORT. */
 
 /*
  * We allocate objects whose first word contains a pointer to a struct
@@ -28,9 +27,6 @@
 
 #define GC_GCJ_H
 
-#ifndef MARK_DESCR_OFFSET
-#  define MARK_DESCR_OFFSET    sizeof(word)
-#endif
        /* Gcj keeps GC descriptor as second word of vtable.    This    */
        /* probably needs to be adjusted for other clients.             */
        /* We currently assume that this offset is such that:           */
 #   include "gc.h"
 #endif
 
+# ifdef __cplusplus
+    extern "C" {
+# endif
+
 /* The following allocators signal an out of memory condition with     */
 /* return GC_oom_fn(bytes);                                            */
 
 /* detect the presence or absence of the debug header.                 */
 /* Mp is really of type mark_proc, as defined in gc_mark.h.  We don't  */
 /* want to include that here for namespace pollution reasons.          */
-extern void GC_init_gcj_malloc(int mp_index, void * /* really mark_proc */mp);
+/* Passing in mp_index here instead of having GC_init_gcj_malloc()     */
+/* internally call GC_new_proc() is quite ugly, but in typical usage   */
+/* scenarios a compiler also has to know about mp_index, so            */
+/* generating it dynamically is not acceptable.  Mp_index will         */
+/* typically be an integer < RESERVED_MARK_PROCS, so that it doesn't   */
+/* collide with GC_new_proc allocated indices.  If the application     */
+/* needs no other reserved indices, zero                               */
+/* (GC_GCJ_RESERVED_MARK_PROC_INDEX in gc_mark.h) is an obvious choice.        */ 
+GC_API void GC_CALL GC_init_gcj_malloc(int mp_index,
+                               void * /* really mark_proc */mp);
 
 /* Allocate an object, clear it, and store the pointer to the  */
 /* type structure (vtable in gcj).                             */
 /* This adds a byte at the end of the object if GC_malloc would.*/
-extern void * GC_gcj_malloc(size_t lb, void * ptr_to_struct_containing_descr);
+GC_API void * GC_CALL GC_gcj_malloc(size_t lb,
+                               void * ptr_to_struct_containing_descr);
 /* The debug versions allocate such that the specified mark_proc       */
 /* is always invoked.                                                  */
-extern void * GC_debug_gcj_malloc(size_t lb,
+GC_API void * GC_CALL GC_debug_gcj_malloc(size_t lb,
                                  void * ptr_to_struct_containing_descr,
                                  GC_EXTRA_PARAMS);
 
 /* Similar to GC_gcj_malloc, but assumes that a pointer to near the    */
 /* beginning of the resulting object is always maintained.             */
-extern void * GC_gcj_malloc_ignore_off_page(size_t lb,
+GC_API void  * GC_CALL GC_gcj_malloc_ignore_off_page(size_t lb,
                                void * ptr_to_struct_containing_descr);
 
 /* The kind numbers of normal and debug gcj objects.           */
 /* Useful only for debug support, we hope.                     */
-extern int GC_gcj_kind;
+GC_API int GC_gcj_kind;
 
-extern int GC_gcj_debug_kind;
+GC_API int GC_gcj_debug_kind;
 
 # ifdef GC_DEBUG
 #   define GC_GCJ_MALLOC(s,d) GC_debug_gcj_malloc(s,d,GC_EXTRAS)
@@ -91,4 +101,8 @@ extern int GC_gcj_debug_kind;
        GC_gcj_malloc_ignore_off_page(s,d)
 # endif
 
+# ifdef __cplusplus
+    }  /* end of extern "C" */
+# endif
+
 #endif /* GC_GCJ_H */