[vmkit-commits] [vmkit] r180458 - OpenJDK implementation fix.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:13:40 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:12:00 2013
New Revision: 180458

URL: http://llvm.org/viewvc/llvm-project?rev=180458&view=rev
Log:
OpenJDK implementation fix.
(cherry picked from commit 021d4172ab831521bb661ce235cdc85994b901ea)

Modified:
    vmkit/trunk/Makefile.rules
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/Makefile
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
    vmkit/trunk/lib/j3/VMCore/JavaThread.h

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:12:00 2013
@@ -223,6 +223,18 @@ else
 MODULE_A_DEP=$(patsubst %.bc,%$(GC_ID).o,$(BC_FILES)) $(patsubst %, $(LIB_DIR)/lib%.a,$(MODULE_USE))
 endif
 
+###############################################################################
+#   OpenJDK definitions
+###############################################################################
+ifeq ($(MODULE), Classpath)
+ifeq ($(CLASSPATH_IMPL), openjdk)
+	VMKIT_OPENJDK_ZIP=$(BUILD_DIR)/vmkit-openjdk.zip
+	CLASSES_DIR=$(PROJ_SRC_CWD)/classes
+	MODULE_A_DEP+=$(VMKIT_OPENJDK_ZIP)
+	OPENJDK_JAVA_SOURCES=$(PROJ_SRC_CWD)/java/lang/VMString.java
+endif
+endif
+
 $(MODULE_A): $(MODULE_A_DEP) $(LIB_DIR)/.dir
 	$(Echo) "Building archive '$(notdir $@)'"
 	-$(Verb) $(RM) -f $@

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.cpp Thu Apr 25 12:12:00 2013
@@ -249,7 +249,7 @@ JavaString** JavaObjectConstructor::getS
   return getSignatureString(sigAtt, cons->classDef);
 }
 
-static inline ArraySInt8* getAttrBytes(JavaAttribute* annotationsAtt, Class* cl) {
+inline ArraySInt8* getAttrBytes(JavaAttribute* annotationsAtt, Class* cl) {
   ArraySInt8* ret = 0;
   llvm_gcroot(ret, 0);
 

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/ClasspathReflect.h Thu Apr 25 12:12:00 2013
@@ -23,6 +23,15 @@
 extern "C" j3::JavaObject* internalFillInStackTrace(j3::JavaObject*);
 namespace j3 {
 
+	/*
+	 * TODO Implement this class for openJDK annotations
+	 */
+	class JavaObjectVMThread : public JavaObject {
+		private:
+		JavaThread* vmdata;
+	  friend std::ostream& operator << (std::ostream&, JavaObjectVMThread&);
+	};
+
 class JavaObjectClass : public JavaObject {
 private:
   JavaObject* cachedConstructor;
@@ -49,12 +58,19 @@ private:
   JavaObject * pd;
 
 public:
+  /*
+   * TODO implement annotations in openJDK
+   */
+  static bool isAnonymousClass(JavaObjectClass* Cl);
+  static JavaObject* getEnclosingClass(JavaObjectClass* Cl);
+  /*****************************************/
 
   static UserCommonClass* getClass(JavaObjectClass* cl) {
     llvm_gcroot(cl, 0);
     return cl->internalClass;
   }
 
+
   static void setClass(JavaObjectClass* cl, UserCommonClass* vmdata) {
     llvm_gcroot(cl, 0);
     cl->internalClass = vmdata;
@@ -95,7 +111,7 @@ public:
     UserCommonClass * cl = getClass(obj);
     if (cl) {
       JavaObject** Obj = cl->classLoader->getJavaClassLoaderPtr();
-      if (*Obj) vmkit::Collector::markAndTraceRoot(Obj, closure);
+      if (*Obj) vmkit::Collector::markAndTraceRoot(Obj, Obj, closure);
     }
   }
 

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Thu Apr 25 12:12:00 2013
@@ -16,7 +16,7 @@
 #include "JavaThread.h"
 #include "JavaUpcalls.h"
 #include "Jnjvm.h"
-#include "ReferenceQueue.h"
+#include "JavaReferenceQueue.h"
 
 #define COMPILE_METHODS(cl) \
   for (CommonClass::method_iterator i = cl->virtualMethods.begin(), \
@@ -70,6 +70,20 @@ ClassArray* Classpath::constructorArrayA
 JavaField*  Classpath::constructorSlot;
 JavaMethod* Classpath::initMethod;
 JavaMethod* Classpath::initField;
+/*
+ * TODO Implement annotation support on openJDK.
+ */
+UserClass*	Classpath::newVMConstructor;
+UserClass*	Classpath::newHashMap;
+JavaMethod*	Classpath::initHashMap;
+JavaMethod*	Classpath::putHashMap;
+UserClass*	Classpath::newAnnotationHandler;
+UserClass*	Classpath::newAnnotation;
+JavaMethod*	Classpath::createAnnotation;
+JavaMethod*	Classpath::getInField;
+JavaMethod*	Classpath::getFieldInClass;
+JavaField*	Classpath::threadName;
+/***********************************************/
 Class*      Classpath::newField;
 Class*      Classpath::newMethod;
 ClassArray* Classpath::methodArrayClass;
@@ -906,17 +920,17 @@ void Classpath::initialiseClasspath(Jnjv
       (word_t)nativeJavaObjectFieldTracer,
       "nativeJavaObjectFieldTracer");
 
-   newVMConstructor->getVirtualVT()->setNativeTracer(
-         (word_t)nativeJavaObjectVMConstructorTracer,
-         "nativeJavaObjectVMConstructorTracer");
-
-      newVMMethod->getVirtualVT()->setNativeTracer(
-         (word_t)nativeJavaObjectVMMethodTracer,
-         "nativeJavaObjectVMMethodTracer");
-
-      newVMField->getVirtualVT()->setNativeTracer(
-         (word_t)nativeJavaObjectVMFieldTracer,
-         "nativeJavaObjectVMFieldTracer");
+//   newVMConstructor->getVirtualVT()->setNativeTracer(
+//         (word_t)nativeJavaObjectVMConstructorTracer,
+//         "nativeJavaObjectVMConstructorTracer");
+//
+//      newVMMethod->getVirtualVT()->setNativeTracer(
+//         (word_t)nativeJavaObjectVMMethodTracer,
+//         "nativeJavaObjectVMMethodTracer");
+//
+//      newVMField->getVirtualVT()->setNativeTracer(
+//         (word_t)nativeJavaObjectVMFieldTracer,
+//         "nativeJavaObjectVMFieldTracer");
 
    //TODO: Fix native tracer for java.lang.Thread to not trace through
    // the eetop field to our internal JavaThread.

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Thu Apr 25 12:12:00 2013
@@ -86,6 +86,20 @@ public:
   ISOLATE_STATIC JavaField*  constructorSlot;
   ISOLATE_STATIC JavaMethod* initMethod;
   ISOLATE_STATIC JavaMethod* initField;
+  /*
+   * TODO Implement annotation support on openJDK.
+   */
+  ISOLATE_STATIC UserClass*  newVMConstructor;
+  ISOLATE_STATIC UserClass*  newHashMap;
+  ISOLATE_STATIC JavaMethod* initHashMap;
+  ISOLATE_STATIC JavaMethod* putHashMap;
+  ISOLATE_STATIC UserClass*  newAnnotationHandler;
+  ISOLATE_STATIC UserClass*  newAnnotation;
+  ISOLATE_STATIC JavaMethod* createAnnotation;
+  ISOLATE_STATIC JavaMethod* getInField;
+  ISOLATE_STATIC JavaMethod* getFieldInClass;
+  ISOLATE_STATIC JavaField* threadName;
+  /***********************************************/
   ISOLATE_STATIC UserClassArray* methodArrayClass;
   ISOLATE_STATIC UserClassArray* fieldArrayClass;
   ISOLATE_STATIC UserClass*      newMethod;

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/Makefile?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/Makefile (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/Makefile Thu Apr 25 12:12:00 2013
@@ -6,47 +6,24 @@
 # License. See LICENSE.TXT for details.
 # 
 ##===----------------------------------------------------------------------===##
-$(error must adapt the open jdk building process)
-
 LEVEL = ../../../..
 
 EXTRA_DIST = OpenJDK.inc
 
-include $(LEVEL)/Makefile.config
-
 MODULE_WITH_GC = Classpath
 
-COMPILE_OPENJDK_ZIP=1
-OPENJDK_JAVA_SOURCES=java/lang/VMString.java
+INCLUDES+=-I$(PROJ_SRC_ROOT)/lib/j3/VMCore -I$(PROJ_SRC_ROOT)/include/j3 -I$(PROJ_SRC_ROOT)/lib/j3/ClassLib -I$(PROJ_SRC_ROOT)/include/j3/openjdk
+COMMON_CFLAGS+= -DVMKitOpenJDKZip=\"$(VMKIT_OPENJDK_ZIP)\"
 
 include $(LEVEL)/Makefile.common
 
-CXX.Flags += -I$(PROJ_SRC_DIR)/../../VMCore
-CXX.Flags += -I$(PROJ_SRC_ROOT)/include/j3
-CXX.Flags += -I$(PROJ_SRC_DIR)/.. -I$(PROJ_OBJ_DIR)/..
-CXX.Flags += -I$(PROJ_SRC_ROOT)/include/j3/openjdk
-CXX.Flags += -DVMKitOpenJDKZip=\"$(VMKIT_OPENJDK_ZIP)\"
-
-###############################################################################
-# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
-###############################################################################
-ifeq ($(COMPILE_OPENJDK_ZIP), 1)
-
-
-# Some variables
-VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
-CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
-
-all-local:: $(VMKIT_OPENJDK_ZIP)
-clean-local::
-	-$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
+INCLUDES+=-I$(PROJ_SRC_ROOT)/lib/j3/VMCore -I$(PROJ_SRC_ROOT)/include/j3 -I$(PROJ_SRC_ROOT)/lib/j3/ClassLib -I$(PROJ_SRC_ROOT)/include/j3/openjdk
+COMMON_CFLAGS+= -DVMKitOpenJDKZip=\"$(VMKIT_OPENJDK_ZIP)\"
 
-$(VMKIT_OPENJDK_ZIP): $(addprefix $(PROJ_SRC_DIR)/,$(OPENJDK_JAVA_SOURCES))
+$(VMKIT_OPENJDK_ZIP): $(OPENJDK_JAVA_SOURCES)
 	$(Echo) "**[13] Building OpenJDK java sources into zip"
 	-$(Verb) $(RM) -rf $@ $(CLASSES_DIR)
 	$(Verb) $(MKDIR) $(CLASSES_DIR)
 	$(Verb) $(JAVAC) $^ -d $(CLASSES_DIR)
 	cd $(CLASSES_DIR) && $(ZIP) -qr $(VMKIT_OPENJDK_ZIP) .
 
-endif
-

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 12:12:00 2013
@@ -86,7 +86,7 @@ JavaObject* consStackElement(vmkit::Fram
   Class* cl = meth->classDef;
   className = JavaString::internalToJava(cl->name, vm);
 
-  Attribute* sourceAtt = cl->lookupAttribute(Attribute::sourceFileAttribute);
+  JavaAttribute* sourceAtt = cl->lookupAttribute(JavaAttribute::sourceFileAttribute);
 
   if (sourceAtt) {
     Reader reader(sourceAtt, cl->bytes);
@@ -600,9 +600,7 @@ JNIEXPORT void JNICALL
 JVM_StartThread(JNIEnv *env, jobject _thread) {
   JavaObject * sleepObject = 0;
   JavaObject * thread = 0;
-  JavaThread * javaThread = 0;
   llvm_gcroot(thread, 0);
-  llvm_gcroot(javaThread, 0);
   llvm_gcroot(sleepObject, 0);
   BEGIN_JNI_EXCEPTION
 
@@ -624,7 +622,8 @@ JVM_StartThread(JNIEnv *env, jobject _th
 
   // If the thread is not a daemon, it is added to the list of threads to
   // wait until exit.
-  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(javaThread);
+  //bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(thread);
+  bool isDaemon = vm->upcalls->daemon->getInstanceInt8Field(thread);
 
   if (!isDaemon) {
     vm->threadSystem.enter();
@@ -1330,6 +1329,7 @@ JVM_FindClassFromClassLoader(JNIEnv *env
   }
   else {
     vm->classNotFoundException(vm->asciizToStr(name));
+    res = NULL;
   }
 
   RETURN_FROM_JNI(res);
@@ -2931,7 +2931,7 @@ JVM_GetEnclosingMethodInfo(JNIEnv* env,
   // Primitives arrays, interfaces...
   if (!cl) RETURN_FROM_JNI(0);
 
-  Attribute* emAtt = cl->lookupAttribute(Attribute::enclosingMethodAttribute);
+  JavaAttribute* emAtt = cl->lookupAttribute(JavaAttribute::enclosingMethodAttribute);
 
   if (emAtt) {
     Reader reader(emAtt, cl->bytes);

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180458&r1=180457&r2=180458&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 12:12:00 2013
@@ -158,7 +158,10 @@ public:
   /// throwFromJNI - Throw an exception after executing JNI code.
   ///
   void throwFromJNI(word_t SP) {
-  	// Nothing to do. The RETURN_FROM_JNI will take care of it.
+  	/* DEBUG*/
+  	endKnownFrame();
+  	enterUncooperativeCode(SP);
+    // Nothing to do. The RETURN_FROM_JNI will take care of it.
   }
   
   /// throwFromNative - Throw an exception after executing Native code.





More information about the vmkit-commits mailing list