123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // -*- c++ -*-
- // boehm-gc.h - Defines for Boehm collector.
- /* Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007 Free Software Foundation
- This file is part of libgcj.
- This software is copyrighted work licensed under the terms of the
- Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
- details. */
- #ifndef __JV_BOEHM_GC__
- #define __JV_BOEHM_GC__
- #define JV_MARKOBJ_DECL void *::_Jv_MarkObj (void *, void *, void *, void *)
- #define JV_MARKARRAY_DECL void *::_Jv_MarkArray (void *, void *, void *, void *)
- extern "C"
- {
- void *_Jv_MarkObj (void *, void *, void *, void *);
- void *_Jv_MarkArray (void *, void *, void *, void *);
- void _Jv_RegisterLibForGc (const void *);
- }
- // Enough stuff to inline _Jv_AllocObj. Ugly.
- #include <gcj/javaprims.h>
- #include <java/lang/Class.h>
- #include <string.h>
- #include <gc_ext_config.h> // for THREAD_LOCAL_ALLOC
- extern "C" void * GC_gcj_malloc(size_t, void *);
- extern "C" void * GC_malloc_atomic(size_t);
- #ifdef THREAD_LOCAL_ALLOC
- extern "C" void * GC_local_gcj_malloc(size_t, void *);
- extern "C" void * GC_local_malloc_atomic(size_t);
- #endif
- #ifndef LIBGCJ_GC_DEBUG
- inline void *
- _Jv_AllocObj (jsize size, jclass klass)
- {
- // This should call GC_GCJ_MALLOC, but that would involve
- // including gc.h.
- #ifdef THREAD_LOCAL_ALLOC
- return GC_local_gcj_malloc (size, klass->vtable);
- #else
- return GC_gcj_malloc (size, klass->vtable);
- #endif
- }
- inline void *
- _Jv_AllocPtrFreeObj (jsize size, jclass klass)
- {
- #ifdef JV_HASH_SYNCHRONIZATION
- # ifdef THREAD_LOCAL_ALLOC
- void * obj = GC_local_malloc_atomic(size);
- # else
- void * obj = GC_malloc_atomic(size);
- # endif
- *((_Jv_VTable **) obj) = klass->vtable;
- #else
- # ifdef THREAD_LOCAL_ALLOC
- void * obj = GC_local_gcj_malloc(size, klass->vtable);
- # else
- void * obj = GC_gcj_malloc(size, klass->vtable);
- # endif
- #endif
- return obj;
- }
- #else /* LIBGCJ_GC_DEBUG */
- void *
- _Jv_AllocObj (jsize size, jclass klass);
- void *
- _Jv_AllocPtrFreeObj (jsize size, jclass klass);
- #endif /* LIBGCJ_GC_DEBUG */
- void _Jv_GCAttachThread ();
- void _Jv_GCDetachThread ();
- // _Jv_AllocBytes (jsize size) should go here, too. But clients don't
- // usually include this header.
- // Suspend the given thread. This includes suspending the calling thread.
- extern "C" void _Jv_SuspendThread (_Jv_Thread_t *);
- // Resume a suspended thread.
- extern "C" void _Jv_ResumeThread (_Jv_Thread_t *);
- // Is the given thread suspended?
- extern "C" int _Jv_IsThreadSuspended (_Jv_Thread_t *);
- #endif /* __JV_BOEHM_GC__ */
|