40 #define GC_THREAD_BIT 0x01
42 #define GC_IS_THREADED(ptr) (((ptrint) ptr) & GC_THREAD_BIT)
43 #define GC_REMOVE_THREAD_BIT(ptr) (((ptrint) ptr) & ~GC_THREAD_BIT)
44 #define GC_SET_THREAD_BIT(ptr) (((ptrint) ptr) | GC_THREAD_BIT)
46 #define GC_THREAD(ref, refptr, start, end) \
47 if (POINTS_INTO(ref, start, end)) { \
48 GC_ASSERT(GC_IS_MARKED(ref)); \
49 *refptr = (java_object_t *) ref->vftbl; \
50 ref->vftbl = (struct _vftbl *) GC_SET_THREAD_BIT(refptr); \
121 GC_LOG2(
printf(
"\tarray-entry points to %p\n", (
void *) ref); );
132 GC_LOG2(
printf(
"\tobject-field points to %p\n", (
void *) ref); );
185 o->
vftbl = (
struct _vftbl *) refptr;
189 GC_LOG2(
printf(
"\t... now points to %p\n", (
void *)
new); );
219 if (
new + size < old) {
225 #if defined(ENABLE_MEMCHECK)
227 MSET(old, MEMORY_CLEAR_BYTE,
u1, size);
233 GC_LOG2(
printf(
"\tcompact_move(old=%p, new=%p, size=0x%x) overlapps!", old,
new, size) );
252 new_size += SIZEOF_VOID_P;
254 *( (
s4 *) (
new + new_size - SIZEOF_VOID_P) ) = hashcode;
257 GC_LOG2(
dolog(
"GC: Hash attached: %d (0x%08x) to new object at %p", hashcode, hashcode,
new); );
285 GC_LOG(
dolog(
"GC: Compaction Phase 0 started ..."); );
291 GC_LOG(
dolog(
"GC: Compaction Phase 1 started ..."); );
297 ptr = region->
base; ptr_new = region->
base;
298 while (ptr < region->ptr) {
318 #if defined(GCCONF_HDRFLAG_REFERENCING)
331 ptr_new += SIZEOF_VOID_P;
338 GC_LOG(
dolog(
"GC: Compaction Phase 2 started ..."); );
345 ptr = region->
base; ptr_new = region->
base;
346 while (ptr < region->ptr) {
373 ptr_new += o_size_new;
387 region->
ptr = ptr_new;
#define GC_CLEAR_MARKED(obj)
#define GC_IS_MARKED(obj)
rootset_entry_t refs[ROOTSET_INITIAL_CAPACITY]
#define MSET(ptr, byte, type, num)
static void compact_thread_references(java_object_t *o, void *start, void *end)
static u4 compact_move(u1 *old, u1 *new, u4 size)
JNIEnv jthread jobject jclass jlong size
#define FOREACH_OBJECT_REF(o, ref, refptr, code)
#define GC_ASSERT(assertion)
#define GC_REMOVE_THREAD_BIT(ptr)
Instruction::InstID tmp[]
static void compact_unthread_references(java_object_t *o, void *new)
s4 get_object_size(java_object_t *o)
void compact_me(rootset_t *rs, regioninfo_t *region)
#define MMOVE(dest, src, type, num)
#define GC_SET_FLAGS(obj, flags)
#define GC_TEST_FLAGS(obj, flags)
void heap_print_object(java_object_t *o)
#define FOREACH_ARRAY_REF(o, ref, refptr, code)
static void compact_thread_rootset(rootset_t *rs, void *start, void *end)
#define GC_IS_THREADED(ptr)
#define GC_THREAD(ref, refptr, start, end)
#define MCOPY(dest, src, type, num)
#define GC_CLEAR_FLAGS(obj, flags)