<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>