[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