You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by wj...@apache.org on 2006/10/18 01:58:49 UTC
svn commit: r465102 - in
/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src: common/gc_for_vm.cpp
common/interior_pointer.cpp common/interior_pointer.h
mark_compact/mspace_collect.cpp trace_forward/fspace_forward.cpp
Author: wjwashburn
Date: Tue Oct 17 16:58:48 2006
New Revision: 465102
URL: http://svn.apache.org/viewvc?view=rev&rev=465102
Log:
HARMONY-1886, GCV5 interior pointer support. This builds on both windows and linux. Since GCV5 is not part of smoke test, smoke test was not run to completion
Added:
incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.cpp
incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.h
Modified:
incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp
incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/mark_compact/mspace_collect.cpp
incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_forward.cpp
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp?view=diff&rev=465102&r1=465101&r2=465102
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/gc_for_vm.cpp Tue Oct 17 16:58:48 2006
@@ -22,6 +22,8 @@
#include "../gen/gen.h"
+#include "../common/interior_pointer.h"
+
static GC* p_global_gc = NULL;
void gc_init()
@@ -108,4 +110,4 @@
{ assert(0); return 0; }
void gc_add_root_set_entry_interior_pointer (void **slot, int offset, Boolean is_pinned)
-{ assert(0); }
+{ add_root_set_entry_interior_pointer(slot, offset, is_pinned); }
Added: incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.cpp?view=auto&rev=465102
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.cpp (added)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.cpp Tue Oct 17 16:58:48 2006
@@ -0,0 +1,49 @@
+
+#include "interior_pointer.h"
+void gc_add_root_set_entry(Managed_Object_Handle *ref, Boolean is_pinned);
+
+typedef struct slot_offset_entry_struct{
+ void** slot;
+ unsigned int offset;
+} slot_offset_entry;
+
+static std::vector<slot_offset_entry> interior_pointer_set;
+
+static const int initial_vector_size = 100;
+static unsigned int interior_pointer_num_count = 0;
+
+
+void add_root_set_entry_interior_pointer(void **slot, int offset, Boolean is_pinned)
+{
+ //check size;
+ if( interior_pointer_set.size() == interior_pointer_num_count )
+ {
+ unsigned int size = interior_pointer_num_count == 0 ? initial_vector_size : interior_pointer_set.size()*2;
+ interior_pointer_set.resize(size);
+ }
+
+ Partial_Reveal_Object* p_obj = (Partial_Reveal_Object*) ((Byte*)*slot - offset);
+ assert(p_obj->vt_raw);
+ slot_offset_entry* push_back_entry = (slot_offset_entry*)&interior_pointer_set[interior_pointer_num_count++];
+ push_back_entry->offset = offset;
+ push_back_entry->slot = slot;
+ *slot = p_obj;
+ gc_add_root_set_entry((Managed_Object_Handle*)slot, is_pinned);
+}
+
+void update_rootset_interior_pointer()
+{
+ unsigned int i;
+ for( i = 0; i<interior_pointer_num_count; i++)
+ {
+ slot_offset_entry* entry_traverser = (slot_offset_entry*)&interior_pointer_set[i];
+ void** root_slot = entry_traverser->slot;
+ Partial_Reveal_Object* root_base = (Partial_Reveal_Object*)*root_slot;//entry_traverser->base;
+ unsigned int root_offset = entry_traverser->offset;
+ void *new_slot_contents = (void *)((Byte*)root_base + root_offset);
+ *root_slot = new_slot_contents;
+ }
+ interior_pointer_set.clear();
+ assert(interior_pointer_set.size()==0);
+ interior_pointer_num_count = 0;
+}
Added: incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.h
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.h?view=auto&rev=465102
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.h (added)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/common/interior_pointer.h Tue Oct 17 16:58:48 2006
@@ -0,0 +1,9 @@
+#ifndef INTERIOR_POINTER_H
+#define INTERIOR_POINTER_H
+
+#include "gc_common.h"
+
+void add_root_set_entry_interior_pointer(void **slot, int offset, Boolean is_pinned);
+void update_rootset_interior_pointer();
+
+#endif //INTERIOR_POINTER_H
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/mark_compact/mspace_collect.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/mark_compact/mspace_collect.cpp?view=diff&rev=465102&r1=465101&r2=465102
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/mark_compact/mspace_collect.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/mark_compact/mspace_collect.cpp Tue Oct 17 16:58:48 2006
@@ -21,6 +21,7 @@
#include "mspace_collect.h"
#include "../thread/collector.h"
#include "../trace_forward/fspace.h"
+#include "../common/interior_pointer.h"
struct GC_Gen;
Space* gc_get_nos(GC_Gen* gc);
Space* gc_get_mos(GC_Gen* gc);
@@ -211,6 +212,7 @@
space_update_remsets((Fspace*)gc_get_nos(gc));
/* FIXME:: interior table */
+ update_rootset_interior_pointer();
return;
}
@@ -329,4 +331,4 @@
collector_execute_task(gc, (TaskType)mark_compact_mspace, (Space*)mspace);
return;
-}
\ No newline at end of file
+}
Modified: incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_forward.cpp
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_forward.cpp?view=diff&rev=465102&r1=465101&r2=465102
==============================================================================
--- incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_forward.cpp (original)
+++ incubator/harmony/enhanced/drlvm/trunk/vm/gc_gen/src/trace_forward/fspace_forward.cpp Tue Oct 17 16:58:48 2006
@@ -20,6 +20,7 @@
#include "fspace.h"
#include "../thread/collector.h"
+#include "../common/interior_pointer.h"
static Boolean fspace_object_to_be_forwarded(Partial_Reveal_Object *p_obj, Fspace *fspace)
{
@@ -221,6 +222,11 @@
return;
}
+static void update_relocated_refs(Collector* collector)
+{
+ update_rootset_interior_pointer();
+}
+
static void trace_forward_fspace(Collector* collector)
{
GC* gc = collector->gc;
@@ -230,7 +236,7 @@
space->remslot_sets->push_back(gc->root_set);
collector_scan_remsets(collector);
-
+ update_relocated_refs(collector);
reset_fspace_for_allocation(space);
return;