[vmkit-commits] [vmkit] r120019 - in /vmkit/branches/multi-vm: include/mvm/Threads/Thread.h lib/J3/VMCore/JavaRuntimeJIT.cpp lib/J3/VMCore/JavaThread.cpp lib/J3/VMCore/JavaThread.h lib/J3/VMCore/Jni.cpp lib/J3/VMCore/Jnjvm.cpp

Gael Thomas gael.thomas at lip6.fr
Tue Nov 23 03:44:37 PST 2010


Author: gthomas
Date: Tue Nov 23 05:44:37 2010
New Revision: 120019

URL: http://llvm.org/viewvc/llvm-project?rev=120019&view=rev
Log:
split the JavaThread and the mvm::Thread (in progress)

Modified:
    vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
    vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
    vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp

Modified: vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/Threads/Thread.h?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/Threads/Thread.h (original)
+++ vmkit/branches/multi-vm/include/mvm/Threads/Thread.h Tue Nov 23 05:44:37 2010
@@ -141,6 +141,7 @@
 
 class VMThreadData {
 public:
+  /// mut - The associated thread mutator
 	Thread* mut;
 
 	VMThreadData(Thread* m) {

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaRuntimeJIT.cpp Tue Nov 23 05:44:37 2010
@@ -355,12 +355,13 @@
 extern "C" void* j3StartJNI(uint32* localReferencesNumber,
                             uint32** oldLocalReferencesNumber,
                             mvm::KnownFrame* Frame) {
-  
-  JavaThread* th = JavaThread::get();
+
+	mvm::Thread* mut = mvm::Thread::get();
+  JavaThread* th   = JavaThread::j3Thread(mut);
  
   *oldLocalReferencesNumber = th->currentAddedReferences;
   th->currentAddedReferences = localReferencesNumber;
-  th->startKnownFrame(*Frame);
+  mut->startKnownFrame(*Frame);
 
   th->startJNI(1);
 
@@ -600,14 +601,14 @@
 
 extern "C" void* j3ResolveVirtualStub(JavaObject* obj) {
   llvm_gcroot(obj, 0);
-  JavaThread *th = JavaThread::get();
+	mvm::Thread *mut = mvm::Thread::get();
   UserCommonClass* cl = JavaObject::getClass(obj);
   void* result = NULL;
   
   BEGIN_NATIVE_EXCEPTION(1)
 
   // Lookup the caller of this class.
-  mvm::StackWalker Walker(th);
+  mvm::StackWalker Walker(mut);
   while (Walker.get()->MethodType != 1) ++Walker;
   mvm::MethodInfo* MI = Walker.get();
   JavaMethod* meth = (JavaMethod*)MI->getMetaInfo();
@@ -666,13 +667,13 @@
 }
 
 extern "C" void* j3ResolveStaticStub() {
-  JavaThread *th = JavaThread::get();
+	mvm::Thread *mut = mvm::Thread::get();
   void* result = NULL;
   
   BEGIN_NATIVE_EXCEPTION(1)
 
   // Lookup the caller of this class.
-  mvm::StackWalker Walker(th);
+  mvm::StackWalker Walker(mut);
   while (Walker.get()->MethodType != 1) ++Walker;
   mvm::MethodInfo* MI = Walker.get();
   assert(MI->MethodType == 1 && "Wrong call to stub");
@@ -704,13 +705,13 @@
 }
 
 extern "C" void* j3ResolveSpecialStub() {
-  JavaThread *th = JavaThread::get();
+	mvm::Thread *mut = mvm::Thread::get();
   void* result = NULL;
   
   BEGIN_NATIVE_EXCEPTION(1)
 
   // Lookup the caller of this class.
-  mvm::StackWalker Walker(th);
+  mvm::StackWalker Walker(mut);
   while (Walker.get()->MethodType != 1) ++Walker;
   mvm::MethodInfo* MI = Walker.get();
   assert(MI->MethodType == 1 && "Wrong call to stub");
@@ -732,7 +733,7 @@
     lookup->lookupSpecialMethodDontThrow(utf8, sign->keyName, caller->classDef);
   
   if (!callee) {
-    th->getJVM()->noSuchMethodError(lookup, utf8);
+		JavaThread::j3Thread(mut)->getJVM()->noSuchMethodError(lookup, utf8);
   }
 
   // Compile the found method.

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp Tue Nov 23 05:44:37 2010
@@ -53,8 +53,9 @@
 }
 
 mvm::Thread *JavaThread::create(JavaObject* thread, JavaObject* vmth, Jnjvm* isolate) {
-	mvm::MutatorThread *res = (mvm::MutatorThread*)new JavaThread(thread, vmth, isolate);
+	JavaThread *res = new JavaThread(thread, vmth, isolate);
 	res->vmData = (mvm::VMThreadData*)res;
+	res->mut    = res;
 	return res;
 }
 

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h Tue Nov 23 05:44:37 2010
@@ -28,37 +28,37 @@
 class Jnjvm;
 
 
-#define BEGIN_NATIVE_EXCEPTION(level) \
-  JavaThread* __th = JavaThread::get(); \
+#define BEGIN_NATIVE_EXCEPTION(level)						\
+  JavaThread* __th = JavaThread::get();					\
   TRY {
 
-#define END_NATIVE_EXCEPTION \
-  } CATCH { \
-    __th->throwFromNative(); \
+#define END_NATIVE_EXCEPTION										\
+  } CATCH {																			\
+    __th->throwFromNative();										\
   } END_CATCH;
 
-#define BEGIN_JNI_EXCEPTION \
-  JavaThread* th = JavaThread::get(); \
-  void* SP = th->getLastSP(); \
-  th->leaveUncooperativeCode(); \
-  mvm::KnownFrame Frame; \
-  th->startKnownFrame(Frame); \
+#define BEGIN_JNI_EXCEPTION														\
+  mvm::Thread* mut = mvm::Thread::get();							\
+  void* SP = mut->getLastSP();												\
+  mut->leaveUncooperativeCode();											\
+  mvm::KnownFrame Frame;															\
+  mut->startKnownFrame(Frame);												\
   TRY {
 
-#define END_JNI_EXCEPTION \
-  } CATCH { \
-    th->throwFromJNI(SP); \
+#define END_JNI_EXCEPTION													\
+  } CATCH {																				\
+		JavaThread::j3Thread(mut)->throwFromJNI(SP);	\
   } END_CATCH;
 
-#define RETURN_FROM_JNI(a) {\
-  th->endKnownFrame(); \
-  th->enterUncooperativeCode(SP); \
-  return (a); } \
-
-#define RETURN_VOID_FROM_JNI {\
-  th->endKnownFrame(); \
-  th->enterUncooperativeCode(SP); \
-  return; } \
+#define RETURN_FROM_JNI(a) {											\
+		mut->endKnownFrame();													\
+		mut->enterUncooperativeCode(SP);							\
+		return (a); }																	\
+
+#define RETURN_VOID_FROM_JNI {										\
+		mut->endKnownFrame();													\
+		mut->enterUncooperativeCode(SP);							\
+		return; }																			\
 
 
 /// JavaThread - This class is the internal representation of a Java thread.
@@ -80,6 +80,9 @@
   ///
   JavaObject* javaThread;
 
+  /// mut - The associated mutator. Should be removed
+	mvm::Thread* mut;
+
   /// vmThread - The VMThread object of this thread.
   ///
   JavaObject* vmThread;

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jni.cpp Tue Nov 23 05:44:37 2010
@@ -173,7 +173,7 @@
                                           false, true, 0);
   str = vm->asciizToStr(msg);
   init->invokeIntSpecial(vm, realCl, res, &str);
-  th->pendingException = res;
+	JavaThread::j3Thread(mut)->pendingException = res;
   
   RETURN_FROM_JNI(1);
   
@@ -190,7 +190,7 @@
   JavaObject* obj = JavaThread::get()->pendingException;
   llvm_gcroot(obj, 0);
   if (obj == NULL) RETURN_FROM_JNI(NULL);
-  jthrowable res = (jthrowable)th->pushJNIRef(obj);
+  jthrowable res = (jthrowable)JavaThread::j3Thread(mut)->pushJNIRef(obj);
   RETURN_FROM_JNI(res);
 
   END_JNI_EXCEPTION

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=120019&r1=120018&r2=120019&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Tue Nov 23 05:44:37 2010
@@ -79,14 +79,14 @@
     //    current thread can obtain the lock for that object
     //    (Java specification §8.13).
     acquire();
-    JavaThread* self = JavaThread::get();
+		mvm::Thread* mut = mvm::Thread::get();
 
     if (getInitializationState() == inClinit) {
       // 2. If initialization by some other thread is in progress for the
       //    class or interface, then wait on this Class object (which 
       //    temporarily releases the lock). When the current thread awakens
       //    from the wait, repeat this step.
-      if (getOwnerClass() != self) {
+      if (getOwnerClass() != mut) {
         while (getOwnerClass()) {
           waitClass();
         }
@@ -119,7 +119,7 @@
     // 6. Otherwise, record the fact that initialization of the Class object is
     //    now in progress by the current thread and release the lock on the
     //    Class object.
-    setOwnerClass(self);
+    setOwnerClass(mut);
     bool vmjced = (getInitializationState() == vmjc);
     setInitializationState(inClinit);
     UserClass* cl = (UserClass*)this;
@@ -155,8 +155,10 @@
         broadcastClass();
         release();
       } END_CATCH;
-      if (self->pendingException != NULL) {
-        self->throwPendingException();
+
+			JavaThread* th = JavaThread::get();
+      if (th->pendingException != NULL) {
+        th->throwPendingException();
         return;
       }
     }
@@ -195,9 +197,9 @@
       TRY {
         meth->invokeIntStatic(vm, cl);
       } CATCH {
-        exc = self->getJavaException();
+        exc = JavaThread::get()->getJavaException();
         assert(exc && "no exception?");
-        self->clearException();
+				mvm::Thread::get()->clearException();
       } END_CATCH;
     }
 #ifdef SERVICE
@@ -224,10 +226,11 @@
     //     ExceptionInInitializerError cannot be created because an
     //     OutOfMemoryError occurs, then instead use an OutOfMemoryError object
     //     in place of E in the following step.
+		JavaThread* th = JavaThread::get();
     if (JavaObject::getClass(exc)->isAssignableFrom(vm->upcalls->newException)) {
       Classpath* upcalls = classLoader->bootstrapLoader->upcalls;
       UserClass* clExcp = upcalls->ExceptionInInitializerError;
-      Jnjvm* vm = self->getJVM();
+      Jnjvm* vm = th->getJVM();
       obj = clExcp->doNew(vm);
       if (obj == NULL) {
         fprintf(stderr, "implement me");
@@ -246,7 +249,7 @@
     setOwnerClass(0);
     broadcastClass();
     release();
-    self->throwException(exc);
+    th->throwException(exc);
     return;
   }
 }
@@ -1088,10 +1091,10 @@
   JnjvmClassLoader* loader = bootstrapLoader;
   
   // First create system threads.
-  finalizerThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+  finalizerThread = JavaThread::create(0, 0, this);
   finalizerThread->start(finalizerStart);
     
-  enqueueThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+  enqueueThread = JavaThread::create(0, 0, this);
   enqueueThread->start(enqueueStart);
   
   // Initialise the bootstrap class loader if it's not
@@ -1236,8 +1239,9 @@
 
   exc = JavaThread::get()->pendingException;
   if (exc != NULL) {
-    JavaThread* th = JavaThread::get();
-    th->clearException();
+		mvm::Thread* mut = mvm::Thread::get();
+    mut->clearException();
+    JavaThread* th   = JavaThread::j3Thread(mut);
     obj = th->currentThread();
     group = upcalls->group->getInstanceObjectField(obj);
     TRY {





More information about the vmkit-commits mailing list