[vmkit-commits] [PATCH] Fix field layout objects in ClasspathReflect.h for OpenJDK
Will Dietz
wdietz2 at illinois.edu
Thu Oct 27 14:42:16 PDT 2011
Inlined below.
Fields copied over from "javap -private java/lang/Class" and similar.
Dropped VMThrowable since unused in OpenJDK port.
~Will
>From 1494e74a9bfb40581baa6c02d08c3e09ad38f0ce Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Thu, 27 Oct 2011 15:45:08 -0500
Subject: [PATCH] Fix field layout for objects in ClasspathReflect.h for
OpenJDK
---
lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp | 4 +-
lib/J3/ClassLib/OpenJDK/ClasspathReflect.h | 179 ++++++++++++++++++--------
2 files changed, 130 insertions(+), 53 deletions(-)
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp
index 3d69fa4..74117ce 100644
--- a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.cpp
@@ -16,14 +16,14 @@ namespace j3 {
JavaMethod* JavaObjectConstructor::getInternalMethod(JavaObjectConstructor*
self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return &(cls->asClass()->virtualMethods[self->slot]);
}
JavaMethod* JavaObjectMethod::getInternalMethod(JavaObjectMethod* self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return &(cls->asClass()->virtualMethods[self->slot]);
}
diff --git a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h
b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h
index 08042b3..66ab9ac 100644
--- a/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h
+++ b/lib/J3/ClassLib/OpenJDK/ClasspathReflect.h
@@ -20,41 +20,71 @@ namespace j3 {
class JavaObjectClass : public JavaObject {
private:
- JavaObject* signers;
- JavaObject* pd;
- UserCommonClass* vmdata;
- JavaObject* constructor;
+ JavaObject* cachedConstructor;
+ JavaObject* newInstanceCallerCache;
+ JavaString* name;
+ JavaObject* declaredFields;
+ JavaObject* publicFields;
+ JavaObject* declaredMethods;
+ JavaObject* publicMethods;
+ JavaObject* declaredConstructors;
+ JavaObject* publicConstructors;
+ JavaObject* declaredPublicFields;
+ uint32_t classRedefinedCount;
+ uint32_t lastRedefinedCount;
+ JavaObject* genericInfo;
+ JavaObject* enumConstants;
+ JavaObject* enumConstantDictionary;
+ JavaObject* annotations;
+ JavaObject* declaredAnnotations;
+ JavaObject* annotationType;
public:
static UserCommonClass* getClass(JavaObjectClass* cl) {
llvm_gcroot(cl, 0);
- return cl->vmdata;
+ assert( 0 && "Not implemented yet!");
+ return NULL;
}
static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) {
llvm_gcroot(cl, 0);
- cl->vmdata = vmdata;
+ assert( 0 && "Not implemented yet!");
}
static void setProtectionDomain(JavaObjectClass* cl, JavaObject* pd) {
llvm_gcroot(cl, 0);
llvm_gcroot(pd, 0);
- mvm::Collector::objectReferenceWriteBarrier(
- (gc*)cl, (gc**)&(cl->pd), (gc*)pd);
+ assert( 0 && "Not implemented yet!");
}
static JavaObject* getProtectionDomain(JavaObjectClass* cl) {
llvm_gcroot(cl, 0);
- return cl->pd;
+ assert( 0 && "Not implemented yet!");
+ return NULL;
}
static void staticTracer(JavaObjectClass* obj, word_t closure) {
- mvm::Collector::markAndTrace(obj, &obj->pd, closure);
- mvm::Collector::markAndTrace(obj, &obj->signers, closure);
- mvm::Collector::markAndTrace(obj, &obj->constructor, closure);
- if (obj->vmdata) {
- JavaObject** Obj = obj->vmdata->classLoader->getJavaClassLoaderPtr();
+ mvm::Collector::markAndTrace(obj, &obj->cachedConstructor, closure);
+ mvm::Collector::markAndTrace(obj, &obj->newInstanceCallerCache, closure);
+ mvm::Collector::markAndTrace(obj, &obj->name, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredFields, closure);
+ mvm::Collector::markAndTrace(obj, &obj->publicFields, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredMethods, closure);
+ mvm::Collector::markAndTrace(obj, &obj->publicMethods, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredConstructors, closure);
+ mvm::Collector::markAndTrace(obj, &obj->publicConstructors, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredPublicFields, closure);
+ mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);
+ mvm::Collector::markAndTrace(obj, &obj->enumConstants, closure);
+ mvm::Collector::markAndTrace(obj, &obj->enumConstantDictionary, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotationType, closure);
+
+ UserCommonClass * cl = getClass(obj);
+ if (cl) {
+ JavaObject** Obj = cl->classLoader->getJavaClassLoaderPtr();
if (*Obj) mvm::Collector::markAndTraceRoot(Obj, closure);
}
}
@@ -62,27 +92,47 @@ public:
class JavaObjectField : public JavaObject {
private:
- uint8 flag;
- JavaObjectClass* declaringClass;
+ JavaObjectClass * clazz;
+ uint32_t slot;
JavaObject* name;
- uint32 slot;
+ JavaObject* type;
+ uint32_t modifiers;
+ JavaString* signature;
+ JavaObject* genericInfo;
+ JavaObject* annotations;
+ JavaObject* fieldAccessor;
+ JavaObject* overrideFieldAccessor;
+ JavaObject* root;
+ JavaObject* securityCheckCache;
+ JavaObject* securityCheckTargetClassCache;
+ JavaObject* declaredAnnotations;
public:
static void staticTracer(JavaObjectField* obj, word_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->clazz, closure);
mvm::Collector::markAndTrace(obj, &obj->name, closure);
- mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+ mvm::Collector::markAndTrace(obj, &obj->type, closure);
+ mvm::Collector::markAndTrace(obj, &obj->signature, closure);
+ mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->fieldAccessor, closure);
+ mvm::Collector::markAndTrace(obj, &obj->overrideFieldAccessor, closure);
+ mvm::Collector::markAndTrace(obj, &obj->root, closure);
+ mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);
+ mvm::Collector::markAndTrace(obj,
&obj->securityCheckTargetClassCache, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);
}
static JavaField* getInternalField(JavaObjectField* self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return &(cls->asClass()->virtualFields[self->slot]);
}
static UserClass* getClass(JavaObjectField* self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return cls->asClass();
}
@@ -90,23 +140,49 @@ public:
class JavaObjectMethod : public JavaObject {
private:
- uint8 flag;
- JavaObjectClass* declaringClass;
- JavaObject* name;
+ JavaObjectClass* clazz;
uint32 slot;
+ JavaObject* name;
+ JavaObject* returnType;
+ JavaObject* parameterTypes;
+ JavaObject* exceptionTypes;
+ uint32_t modifiers;
+ JavaString* Signature;
+ JavaObject* genericInfo;
+ JavaObject* annotations;
+ JavaObject* parameterAnnotations;
+ JavaObject* annotationDefault;
+ JavaObject* methodAccessor;
+ JavaObject* root;
+ JavaObject* securityCheckCache;
+ JavaObject* securityCheckTargetClassCache;
+ JavaObject* declaredAnnotations;
public:
static void staticTracer(JavaObjectMethod* obj, word_t closure) {
+ mvm::Collector::markAndTrace(obj, &obj->clazz, closure);
mvm::Collector::markAndTrace(obj, &obj->name, closure);
- mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+ mvm::Collector::markAndTrace(obj, &obj->returnType, closure);
+ mvm::Collector::markAndTrace(obj, &obj->parameterTypes, closure);
+ mvm::Collector::markAndTrace(obj, &obj->exceptionTypes, closure);
+ mvm::Collector::markAndTrace(obj, &obj->Signature, closure);
+ mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->parameterAnnotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotationDefault, closure);
+ mvm::Collector::markAndTrace(obj, &obj->methodAccessor, closure);
+ mvm::Collector::markAndTrace(obj, &obj->root, closure);
+ mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);
+ mvm::Collector::markAndTrace(obj,
&obj->securityCheckTargetClassCache, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);
}
static JavaMethod* getInternalMethod(JavaObjectMethod* self);
static UserClass* getClass(JavaObjectMethod* self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return cls->asClass();
}
@@ -114,51 +190,51 @@ public:
class JavaObjectConstructor : public JavaObject {
private:
- uint8 flag;
- JavaObjectClass* declaringClass;
+ JavaObjectClass* clazz;
uint32 slot;
+ JavaObject* parameterTypes;
+ JavaObject* exceptionTypes;
+ uint32_t modifiers;
+ JavaString* signature;
+ JavaObject* genericInfo;
+ JavaObject* annotations;
+ JavaObject* parameterAnnotations;
+ JavaObject* securityCheckCache;
+ JavaObject* constructorAccessor;
+ JavaObject* root;
+ JavaObject* declaredAnnotations;
public:
static void staticTracer(JavaObjectConstructor* obj, word_t closure) {
- mvm::Collector::markAndTrace(obj, &obj->declaringClass, closure);
+ mvm::Collector::markAndTrace(obj, &obj->clazz, closure);
+ mvm::Collector::markAndTrace(obj, &obj->parameterTypes, closure);
+ mvm::Collector::markAndTrace(obj, &obj->exceptionTypes, closure);
+ mvm::Collector::markAndTrace(obj, &obj->signature, closure);
+ mvm::Collector::markAndTrace(obj, &obj->genericInfo, closure);
+ mvm::Collector::markAndTrace(obj, &obj->annotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->parameterAnnotations, closure);
+ mvm::Collector::markAndTrace(obj, &obj->securityCheckCache, closure);
+ mvm::Collector::markAndTrace(obj, &obj->constructorAccessor, closure);
+ mvm::Collector::markAndTrace(obj, &obj->root, closure);
+ mvm::Collector::markAndTrace(obj, &obj->declaredAnnotations, closure);
}
static JavaMethod* getInternalMethod(JavaObjectConstructor* self);
static UserClass* getClass(JavaObjectConstructor* self) {
llvm_gcroot(self, 0);
- UserCommonClass* cls = JavaObjectClass::getClass(self->declaringClass);
+ UserCommonClass* cls = JavaObjectClass::getClass(self->clazz);
return cls->asClass();
}
};
-class JavaObjectVMThread : public JavaObject {
-private:
- JavaObject* thread;
- bool running;
- JavaThread* vmdata;
-
-public:
- static void staticTracer(JavaObjectVMThread* obj, word_t closure) {
- mvm::Collector::markAndTrace(obj, &obj->thread, closure);
- }
-
- static void setVmdata(JavaObjectVMThread* vmthread,
- JavaThread* internal_thread) {
- llvm_gcroot(vmthread, 0);
- vmthread->vmdata = internal_thread;
- }
-
-};
-
-
class JavaObjectThrowable : public JavaObject {
private:
+ JavaObject* backtrace;
JavaObject* detailedMessage;
JavaObject* cause;
JavaObject* stackTrace;
- JavaObject* vmState;
public:
@@ -192,7 +268,8 @@ class JavaObjectReference : public JavaObject {
private:
JavaObject* referent;
JavaObject* queue;
- JavaObject* nextOnQueue;
+ JavaObject* next;
+ JavaObject* discovered;
public:
static void init(JavaObjectReference* self, JavaObject* r, JavaObject* q) {
--
1.7.5.1
More information about the vmkit-commits
mailing list