OSDN Git Service

2002-08-14 Jesse Rosenstock <jmr@ugcs.caltech.edu>
[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  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   JV_MARKOBJ_DECL;
21   JV_MARKARRAY_DECL;
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 extern "C" void * GC_gcj_malloc(size_t, void *);
30 extern "C" void * GC_malloc_atomic(size_t);
31 #ifdef THREAD_LOCAL_ALLOC
32 extern "C" void * GC_local_gcj_malloc(size_t, void *);
33 extern "C" void * GC_local_malloc_atomic(size_t);
34 #endif
35
36 inline void *
37 _Jv_AllocObj (jsize size, jclass klass)
38 {
39   // This should call GC_GCJ_MALLOC, but that would involve
40   // including gc.h.
41 #ifdef THREAD_LOCAL_ALLOC
42   return GC_local_gcj_malloc (size, klass->vtable);
43 #else 
44   return GC_gcj_malloc (size, klass->vtable);
45 #endif
46 }
47
48 inline void *
49 _Jv_AllocPtrFreeObj (jsize size, jclass klass)
50 {
51 #ifdef JV_HASH_SYNCHRONIZATION
52 # ifdef THREAD_LOCAL_ALLOC
53     void * obj = GC_local_malloc_atomic(size);
54 # else
55     void * obj = GC_malloc_atomic(size);
56 # endif
57   *((_Jv_VTable **) obj) = klass->vtable;
58 #else
59 # ifdef THREAD_LOCAL_ALLOC
60     void * obj = GC_local_gcj_malloc(size, klass->vtable);
61 # else
62     void * obj = GC_gcj_malloc(size, klass->vtable);
63 # endif
64 #endif
65   return obj;
66 }
67
68 // _Jv_AllocBytes (jsize size) should go here, too.  But clients don't
69 // usually include this header.
70
71 #endif /* __JV_BOEHM_GC__ */