[vmkit-commits] [PATCH] Fix field layout objects in ClasspathReflect.h for OpenJDK

Nicolas Geoffray nicolas.geoffray at gmail.com
Fri Oct 28 04:14:03 PDT 2011


Looks good with a few comments.

On Thu, Oct 27, 2011 at 11:42 PM, Will Dietz <wdietz2 at illinois.edu> wrote:

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

Replace with UNIMPLEMENTED();


>   }
>
>   static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) {
>     llvm_gcroot(cl, 0);
> -    cl->vmdata = vmdata;
> +    assert( 0 && "Not implemented yet!");
>

Replace with UNIMPLEMENTED();


>   }
>
>   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!");
>

Replace with UNIMPLEMENTED();


>   }
>
>   static JavaObject* getProtectionDomain(JavaObjectClass* cl) {
>     llvm_gcroot(cl, 0);
> -    return cl->pd;
> +    assert( 0 && "Not implemented yet!");
> +    return NULL;
>

Replace with UNIMPLEMENTED();



>   }
>
>   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);
>

Wow! So I guess you can not run the GC yet in an OpenJDK environment? :)


> +    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
> _______________________________________________
> vmkit-commits mailing list
> vmkit-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/vmkit-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/vmkit-commits/attachments/20111028/cec865d4/attachment.html>


More information about the vmkit-commits mailing list