OSDN Git Service

2005-01-01 Bryce McKinlay <mckinlay@redhat.com>
[pf3gnuchains/gcc-fork.git] / libjava / include / boehm-gc.h
1 // -*- c++ -*-
2 // boehm-gc.h - Defines for Boehm collector.
3
4 /* Copyright (C) 1998, 1999, 2002, 2004  Free Software Foundation
5
6    This file is part of libgcj.
7
8 This software is copyrighted work licensed under the terms of the
9 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
10 details.  */
11
12 #ifndef __JV_BOEHM_GC__
13 #define __JV_BOEHM_GC__
14
15 #define JV_MARKOBJ_DECL void *::_Jv_MarkObj (void *, void *, void *, void *)
16 #define JV_MARKARRAY_DECL void *::_Jv_MarkArray (void *, void *, void *, void *)
17
18 extern "C"
19 {
20   void *_Jv_MarkObj (void *, void *, void *, void *);
21   void *_Jv_MarkArray (void *, void *, void *, void *);
22 }
23
24 // Enough stuff to inline _Jv_AllocObj.  Ugly.
25 #include <gcj/javaprims.h>
26 #include <java/lang/Class.h>
27 #include <string.h>
28
29 #include <gc_ext_config.h> // for THREAD_LOCAL_ALLOC
30
31 extern "C" void * GC_gcj_malloc(size_t, void *);
32 extern "C" void * GC_malloc_atomic(size_t);
33 #ifdef THREAD_LOCAL_ALLOC
34 extern "C" void * GC_local_gcj_malloc(size_t, void *);
35 extern "C" void * GC_local_malloc_atomic(size_t);
36 #endif
37
38 #ifndef LIBGCJ_GC_DEBUG
39
40 inline void *
41 _Jv_AllocObj (jsize size, jclass klass)
42 {
43   // This should call GC_GCJ_MALLOC, but that would involve
44   // including gc.h.
45 #ifdef THREAD_LOCAL_ALLOC
46   return GC_local_gcj_malloc (size, klass->vtable);
47 #else 
48   return GC_gcj_malloc (size, klass->vtable);
49 #endif
50 }
51
52 inline void *
53 _Jv_AllocPtrFreeObj (jsize size, jclass klass)
54 {
55 #ifdef JV_HASH_SYNCHRONIZATION
56 # ifdef THREAD_LOCAL_ALLOC
57     void * obj = GC_local_malloc_atomic(size);
58 # else
59     void * obj = GC_malloc_atomic(size);
60 # endif
61   *((_Jv_VTable **) obj) = klass->vtable;
62 #else
63 # ifdef THREAD_LOCAL_ALLOC
64     void * obj = GC_local_gcj_malloc(size, klass->vtable);
65 # else
66     void * obj = GC_gcj_malloc(size, klass->vtable);
67 # endif
68 #endif
69   return obj;
70 }
71
72 #else /* LIBGCJ_GC_DEBUG */
73
74 void *
75 _Jv_AllocObj (jsize size, jclass klass);
76
77 void *
78 _Jv_AllocPtrFreeObj (jsize size, jclass klass);
79
80 #endif /* LIBGCJ_GC_DEBUG */
81
82 // _Jv_AllocBytes (jsize size) should go here, too.  But clients don't
83 // usually include this header.
84
85 #endif /* __JV_BOEHM_GC__ */