1999-04-07 16:42:40 +02:00
|
|
|
// -*- c++ -*-
|
|
|
|
// boehm-gc.h - Defines for Boehm collector.
|
|
|
|
|
2004-11-18 06:37:13 +01:00
|
|
|
/* Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
|
|
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__
|
|
|
|
|
2004-11-18 06:37:13 +01:00
|
|
|
#define JV_MARKOBJ_DECL void *::_Jv_MarkObj (void *, void *, void *, void *)
|
|
|
|
#define JV_MARKARRAY_DECL void *::_Jv_MarkArray (void *, void *, void *, void *)
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
|
|
extern "C"
|
|
|
|
{
|
2004-11-18 06:37:13 +01:00
|
|
|
void *_Jv_MarkObj (void *, void *, void *, void *);
|
|
|
|
void *_Jv_MarkArray (void *, void *, void *, void *);
|
2002-12-28 07:38:52 +01:00
|
|
|
}
|
1999-04-07 16:42:40 +02:00
|
|
|
|
2001-05-24 07:40:37 +02:00
|
|
|
// Enough stuff to inline _Jv_AllocObj. Ugly.
|
|
|
|
#include <gcj/javaprims.h>
|
|
|
|
#include <java/lang/Class.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
2005-01-02 04:35:57 +01:00
|
|
|
#include <gc_ext_config.h> // for THREAD_LOCAL_ALLOC
|
2004-08-14 01:05:36 +02:00
|
|
|
|
2001-05-24 07:40:37 +02:00
|
|
|
extern "C" void * GC_gcj_malloc(size_t, void *);
|
|
|
|
extern "C" void * GC_malloc_atomic(size_t);
|
2001-10-25 19:29:41 +02:00
|
|
|
#ifdef THREAD_LOCAL_ALLOC
|
|
|
|
extern "C" void * GC_local_gcj_malloc(size_t, void *);
|
|
|
|
extern "C" void * GC_local_malloc_atomic(size_t);
|
|
|
|
#endif
|
2001-05-24 07:40:37 +02:00
|
|
|
|
configure.ac: Handle --enable-gc-debug.
* configure.ac: Handle --enable-gc-debug.
* configure: Regenerate.
* include/config.h.in (LIBGCJ_GC_DEBUG): Add.
* boehm.cc: Include gc_mark.h, javaxfc.h, but no GC private files.
Rearrange include file order.
(GC_DEBUG): Set if LIBGCJ_GC_DEBUG is set.
(GC_finalize_all, GC_debug_generic_malloc): Don't declare.
(disable_gc_mutex): Delete along with all references.
(_Jv_MarkObj, _Jv_MarkArray): Use public types,
adjust for debug header size.
(_Jv_AllocObj, _Jv_allocPtrFreeObj): Define out of line for
debug case.
(_Jv_AllocArray): Declare min_heap_addr only if needed.
(gcj_describe_type_fn): New.
(_Jv_InitGC): Use GC_new_free_list, GC_new_proc, and GC_new_kind.
Register gcj_describe_type_fn.
* include/boehm-gc.h:
(_Jv_AllocObj, _Jv_allocPtrFreeObj):
Don't define, but declare, for debug case.
* java/lang/natObject.cc:
(GC_DEBUG): Define if LIBGCJ_GC_DEBUG is set.
From-SVN: r86686
2004-08-28 02:45:56 +02:00
|
|
|
#ifndef LIBGCJ_GC_DEBUG
|
|
|
|
|
2001-05-24 07:40:37 +02:00
|
|
|
inline void *
|
|
|
|
_Jv_AllocObj (jsize size, jclass klass)
|
|
|
|
{
|
|
|
|
// This should call GC_GCJ_MALLOC, but that would involve
|
|
|
|
// including gc.h.
|
2001-10-25 19:29:41 +02:00
|
|
|
#ifdef THREAD_LOCAL_ALLOC
|
|
|
|
return GC_local_gcj_malloc (size, klass->vtable);
|
|
|
|
#else
|
2001-05-24 07:40:37 +02:00
|
|
|
return GC_gcj_malloc (size, klass->vtable);
|
2001-10-25 19:29:41 +02:00
|
|
|
#endif
|
2001-05-24 07:40:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline void *
|
|
|
|
_Jv_AllocPtrFreeObj (jsize size, jclass klass)
|
|
|
|
{
|
|
|
|
#ifdef JV_HASH_SYNCHRONIZATION
|
2001-10-25 19:29:41 +02:00
|
|
|
# ifdef THREAD_LOCAL_ALLOC
|
|
|
|
void * obj = GC_local_malloc_atomic(size);
|
|
|
|
# else
|
|
|
|
void * obj = GC_malloc_atomic(size);
|
|
|
|
# endif
|
2001-05-24 07:40:37 +02:00
|
|
|
*((_Jv_VTable **) obj) = klass->vtable;
|
|
|
|
#else
|
2001-10-25 19:29:41 +02:00
|
|
|
# ifdef THREAD_LOCAL_ALLOC
|
|
|
|
void * obj = GC_local_gcj_malloc(size, klass->vtable);
|
|
|
|
# else
|
|
|
|
void * obj = GC_gcj_malloc(size, klass->vtable);
|
|
|
|
# endif
|
2001-05-24 07:40:37 +02:00
|
|
|
#endif
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
configure.ac: Handle --enable-gc-debug.
* configure.ac: Handle --enable-gc-debug.
* configure: Regenerate.
* include/config.h.in (LIBGCJ_GC_DEBUG): Add.
* boehm.cc: Include gc_mark.h, javaxfc.h, but no GC private files.
Rearrange include file order.
(GC_DEBUG): Set if LIBGCJ_GC_DEBUG is set.
(GC_finalize_all, GC_debug_generic_malloc): Don't declare.
(disable_gc_mutex): Delete along with all references.
(_Jv_MarkObj, _Jv_MarkArray): Use public types,
adjust for debug header size.
(_Jv_AllocObj, _Jv_allocPtrFreeObj): Define out of line for
debug case.
(_Jv_AllocArray): Declare min_heap_addr only if needed.
(gcj_describe_type_fn): New.
(_Jv_InitGC): Use GC_new_free_list, GC_new_proc, and GC_new_kind.
Register gcj_describe_type_fn.
* include/boehm-gc.h:
(_Jv_AllocObj, _Jv_allocPtrFreeObj):
Don't define, but declare, for debug case.
* java/lang/natObject.cc:
(GC_DEBUG): Define if LIBGCJ_GC_DEBUG is set.
From-SVN: r86686
2004-08-28 02:45:56 +02:00
|
|
|
#else /* LIBGCJ_GC_DEBUG */
|
|
|
|
|
|
|
|
void *
|
|
|
|
_Jv_AllocObj (jsize size, jclass klass);
|
|
|
|
|
|
|
|
void *
|
|
|
|
_Jv_AllocPtrFreeObj (jsize size, jclass klass);
|
|
|
|
|
|
|
|
#endif /* LIBGCJ_GC_DEBUG */
|
|
|
|
|
2001-05-24 07:40:37 +02:00
|
|
|
// _Jv_AllocBytes (jsize size) should go here, too. But clients don't
|
|
|
|
// usually include this header.
|
|
|
|
|
1999-04-07 16:42:40 +02:00
|
|
|
#endif /* __JV_BOEHM_GC__ */
|