<div>Looks good with a few comments.</div><div><br></div>On Thu, Oct 27, 2011 at 11:42 PM, Will Dietz <span dir="ltr"><<a href="mailto:wdietz2@illinois.edu" target="_blank">wdietz2@illinois.edu</a>></span> wrote:<br>
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Inlined below.<br>
<br>
Fields copied over from "javap -private java/lang/Class" and similar.<br>
<br>
Dropped VMThrowable since unused in OpenJDK port.<br>
<br>
~Will<br>
<br>
>From 1494e74a9bfb40581baa6c02d08c3e09ad38f0ce Mon Sep 17 00:00:00 2001<br>
From: Will Dietz <<a href="mailto:w@wdtz.org" target="_blank">w@wdtz.org</a>><br>
Date: Thu, 27 Oct 2011 15:45:08 -0500<br>
Subject: [PATCH] Fix field layout for objects in ClasspathReflect.h for<br>
 OpenJDK<br>
<br>
---<br>
 lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp |    4 +-<br>
 lib/J3/ClassLib/OpenJDK/ClasspathReflect.h   |  179 ++++++++++++++++++--------<br>
 2 files changed, 130 insertions(+), 53 deletions(-)<br>
<br>
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
index 3d69fa4..74117ce 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp<br>
@@ -16,14 +16,14 @@ namespace j3 {<br>
<br>
 JavaMethod* JavaObjectConstructor::getInternalMethod(JavaObjectConstructor*<br>
self) {<br>
   llvm_gcroot(self, 0);<br>
-  UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+  UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
   return &(cls->asClass()->virtualMethods[self->slot]);<br>
 }<br>
<br>
<br>
 JavaMethod* JavaObjectMethod::getInternalMethod(JavaObjectMethod* self) {<br>
   llvm_gcroot(self, 0);<br>
-  UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+  UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
   return &(cls->asClass()->virtualMethods[self->slot]);<br>
 }<br>
<br>
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
index 08042b3..66ab9ac 100644<br>
--- a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h<br>
@@ -20,41 +20,71 @@ namespace j3 {<br>
<br>
 class JavaObjectClass : public JavaObject {<br>
 private:<br>
-  JavaObject* signers;<br>
-  JavaObject* pd;<br>
-  UserCommonClass* vmdata;<br>
-  JavaObject* constructor;<br>
+  JavaObject* cachedConstructor;<br>
+  JavaObject* newInstanceCallerCache;<br>
+  JavaString* name;<br>
+  JavaObject* declaredFields;<br>
+  JavaObject* publicFields;<br>
+  JavaObject* declaredMethods;<br>
+  JavaObject* publicMethods;<br>
+  JavaObject* declaredConstructors;<br>
+  JavaObject* publicConstructors;<br>
+  JavaObject* declaredPublicFields;<br>
+  uint32_t classRedefinedCount;<br>
+  uint32_t lastRedefinedCount;<br>
+  JavaObject* genericInfo;<br>
+  JavaObject* enumConstants;<br>
+  JavaObject* enumConstantDictionary;<br>
+  JavaObject* annotations;<br>
+  JavaObject* declaredAnnotations;<br>
+  JavaObject* annotationType;<br>
<br>
 public:<br>
<br>
   static UserCommonClass* getClass(JavaObjectClass* cl) {<br>
     llvm_gcroot(cl, 0);<br>
-    return cl->vmdata;<br>
+    assert( 0 && "Not implemented yet!");<br>
+    return NULL;<br></blockquote><div><br></div><div>Replace with UNIMPLEMENTED();</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   }<br>
<br>
   static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) {<br>
     llvm_gcroot(cl, 0);<br>
-    cl->vmdata = vmdata;<br>
+    assert( 0 && "Not implemented yet!");<br></blockquote><div><br></div><div>Replace with UNIMPLEMENTED();</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

   }<br>
<br>
   static void setProtectionDomain(JavaObjectClass* cl, JavaObject* pd) {<br>
     llvm_gcroot(cl, 0);<br>
     llvm_gcroot(pd, 0);<br>
-    mvm::Collector::objectReferenceWriteBarrier(<br>
-        (gc*)cl, (gc**)&(cl->pd), (gc*)pd);<br>
+    assert( 0 && "Not implemented yet!");<br></blockquote><div><br></div><div>Replace with UNIMPLEMENTED();</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

   }<br>
<br>
   static JavaObject* getProtectionDomain(JavaObjectClass* cl) {<br>
     llvm_gcroot(cl, 0);<br>
-    return cl->pd;<br>
+    assert( 0 && "Not implemented yet!");<br>
+    return NULL;<br></blockquote><div><br></div><div><div>Replace with UNIMPLEMENTED();</div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

   }<br>
<br>
   static void staticTracer(JavaObjectClass* obj, word_t closure) {<br>
-    mvm::Collector::markAndTrace(obj, &obj->pd, closure);<br>
-    mvm::Collector::markAndTrace(obj, &obj->signers, closure);<br>
-    mvm::Collector::markAndTrace(obj, &obj->constructor, closure);<br>
-    if (obj->vmdata) {<br>
-      JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr();<br>
+    mvm::Collector::markAndTrace(obj, &obj->cachedConstructor, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->newInstanceCallerCache, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->name, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredFields, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->publicFields, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredMethods, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->publicMethods, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredConstructors, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->publicConstructors, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredPublicFields, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->enumConstants, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->enumConstantDictionary, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotationType, closure);<br>
+<br>
+    UserCommonClass * cl = getClass(obj);<br></blockquote><div><br></div><div>Wow! So I guess you can not run the GC yet in an OpenJDK environment? :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

+    if (cl) {<br>
+      JavaObject** Obj = cl->classLoader->getJavaClassLoaderPtr();<br>
       if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure); </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
     }<br>
   }<br>
@@ -62,27 +92,47 @@ public:<br>
<br>
 class JavaObjectField : public JavaObject {<br>
 private:<br>
-  uint8 flag;<br>
-  JavaObjectClass* declaringClass;<br>
+  JavaObjectClass * clazz;<br>
+  uint32_t slot;<br>
   JavaObject* name;<br>
-  uint32 slot;<br>
+  JavaObject* type;<br>
+  uint32_t modifiers;<br>
+  JavaString* signature;<br>
+  JavaObject* genericInfo;<br>
+  JavaObject* annotations;<br>
+  JavaObject* fieldAccessor;<br>
+  JavaObject* overrideFieldAccessor;<br>
+  JavaObject* root;<br>
+  JavaObject* securityCheckCache;<br>
+  JavaObject* securityCheckTargetClassCache;<br>
+  JavaObject* declaredAnnotations;<br>
<br>
 public:<br>
<br>
   static void staticTracer(JavaObjectField* obj, word_t closure) {<br>
+    mvm::Collector::markAndTrace(obj, &obj->clazz, closure);<br>
     mvm::Collector::markAndTrace(obj, &obj->name, closure);<br>
-    mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->type, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->signature, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->fieldAccessor, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->overrideFieldAccessor, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->root, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);<br>
+    mvm::Collector::markAndTrace(obj,<br>
&obj->securityCheckTargetClassCache, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);<br>
   }<br>
<br>
   static JavaField* getInternalField(JavaObjectField* self) {<br>
     llvm_gcroot(self, 0);<br>
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+    UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
     return &(cls->asClass()->virtualFields[self->slot]);<br>
   }<br>
<br>
   static UserClass* getClass(JavaObjectField* self) {<br>
     llvm_gcroot(self, 0);<br>
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+    UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
     return cls->asClass();<br>
   }<br>
<br>
@@ -90,23 +140,49 @@ public:<br>
<br>
 class JavaObjectMethod : public JavaObject {<br>
 private:<br>
-  uint8 flag;<br>
-  JavaObjectClass* declaringClass;<br>
-  JavaObject* name;<br>
+  JavaObjectClass* clazz;<br>
   uint32 slot;<br>
+  JavaObject* name;<br>
+  JavaObject* returnType;<br>
+  JavaObject* parameterTypes;<br>
+  JavaObject* exceptionTypes;<br>
+  uint32_t modifiers;<br>
+  JavaString* Signature;<br>
+  JavaObject* genericInfo;<br>
+  JavaObject* annotations;<br>
+  JavaObject* parameterAnnotations;<br>
+  JavaObject* annotationDefault;<br>
+  JavaObject* methodAccessor;<br>
+  JavaObject* root;<br>
+  JavaObject* securityCheckCache;<br>
+  JavaObject* securityCheckTargetClassCache;<br>
+  JavaObject* declaredAnnotations;<br>
<br>
 public:<br>
<br>
   static void staticTracer(JavaObjectMethod* obj, word_t closure) {<br>
+    mvm::Collector::markAndTrace(obj, &obj->clazz, closure);<br>
     mvm::Collector::markAndTrace(obj, &obj->name, closure);<br>
-    mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->returnType, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->parameterTypes, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->exceptionTypes, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->Signature, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->parameterAnnotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotationDefault, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->methodAccessor, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->root, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);<br>
+    mvm::Collector::markAndTrace(obj,<br>
&obj->securityCheckTargetClassCache, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);<br>
   }<br>
<br>
   static JavaMethod* getInternalMethod(JavaObjectMethod* self);<br>
<br>
   static UserClass* getClass(JavaObjectMethod* self) {<br>
     llvm_gcroot(self, 0);<br>
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+    UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
     return cls->asClass();<br>
   }<br>
<br>
@@ -114,51 +190,51 @@ public:<br>
<br>
 class JavaObjectConstructor : public JavaObject {<br>
 private:<br>
-  uint8 flag;<br>
-  JavaObjectClass* declaringClass;<br>
+  JavaObjectClass* clazz;<br>
   uint32 slot;<br>
+  JavaObject* parameterTypes;<br>
+  JavaObject* exceptionTypes;<br>
+  uint32_t modifiers;<br>
+  JavaString* signature;<br>
+  JavaObject* genericInfo;<br>
+  JavaObject* annotations;<br>
+  JavaObject* parameterAnnotations;<br>
+  JavaObject* securityCheckCache;<br>
+  JavaObject* constructorAccessor;<br>
+  JavaObject* root;<br>
+  JavaObject* declaredAnnotations;<br>
<br>
 public:<br>
   static void staticTracer(JavaObjectConstructor* obj, word_t closure) {<br>
-    mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->clazz, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->parameterTypes, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->exceptionTypes, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->signature, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->annotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->parameterAnnotations, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->constructorAccessor, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->root, closure);<br>
+    mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);<br>
   }<br>
<br>
   static JavaMethod* getInternalMethod(JavaObjectConstructor* self);<br>
<br>
   static UserClass* getClass(JavaObjectConstructor* self) {<br>
     llvm_gcroot(self, 0);<br>
-    UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);<br>
+    UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);<br>
     return cls->asClass();<br>
   }<br>
<br>
 };<br>
<br>
-class JavaObjectVMThread : public JavaObject {<br>
-private:<br>
-  JavaObject* thread;<br>
-  bool running;<br>
-  JavaThread* vmdata;<br>
-<br>
-public:<br>
-  static void staticTracer(JavaObjectVMThread* obj, word_t closure) {<br>
-    mvm::Collector::markAndTrace(obj, &obj->thread, closure);<br>
-  }<br>
-<br>
-  static void setVmdata(JavaObjectVMThread* vmthread,<br>
-                        JavaThread* internal_thread) {<br>
-    llvm_gcroot(vmthread, 0);<br>
-    vmthread->vmdata = internal_thread;<br>
-  }<br>
-<br>
-};<br>
-<br>
-<br>
 class JavaObjectThrowable : public JavaObject {<br>
 private:<br>
+  JavaObject* backtrace;<br>
   JavaObject* detailedMessage;<br>
   JavaObject* cause;<br>
   JavaObject* stackTrace;<br>
-  JavaObject* vmState;<br>
<br>
 public:<br>
<br>
@@ -192,7 +268,8 @@ class JavaObjectReference : public JavaObject {<br>
 private:<br>
   JavaObject* referent;<br>
   JavaObject* queue;<br>
-  JavaObject* nextOnQueue;<br>
+  JavaObject* next;<br>
+  JavaObject* discovered;<br>
<br>
 public:<br>
   static void init(JavaObjectReference* self, JavaObject* r, JavaObject* q) {<br>
<font color="#888888">--<br>
1.7.5.1<br>
_______________________________________________<br>
vmkit-commits mailing list<br>
<a href="mailto:vmkit-commits@cs.uiuc.edu" target="_blank">vmkit-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits</a><br>
</font></blockquote></div><br>