[vmkit-commits] [vmkit] r120941 - in /vmkit/branches/multi-vm: include/mvm/Threads/Thread.h lib/J3/VMCore/JavaThread.cpp lib/J3/VMCore/JavaThread.h lib/J3/VMCore/Jnjvm.cpp lib/Mvm/CommonThread/VMThreadData.cpp lib/Mvm/CommonThread/ctthread.cpp

Gael Thomas gael.thomas at lip6.fr
Sun Dec 5 07:45:20 PST 2010


Author: gthomas
Date: Sun Dec  5 09:45:20 2010
New Revision: 120941

URL: http://llvm.org/viewvc/llvm-project?rev=120941&view=rev
Log:
attach a vm specific data by changing the active vm

Modified:
    vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
    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/Jnjvm.cpp
    vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp
    vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.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=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/Threads/Thread.h (original)
+++ vmkit/branches/multi-vm/include/mvm/Threads/Thread.h Sun Dec  5 09:45:20 2010
@@ -129,26 +129,25 @@
 
 
 class ExceptionBuffer;
-class MutatorThread;
+class Thread;
 class VMKit;
 
 // WARNING: if you modify this class, you must also change mvm-runtime.ll
 class VMThreadData {
 public:
   /// mut - The associated thread mutator
-	MutatorThread*  mut;
+	Thread*         mut;
+
   /// vm - The associated virtual machine
 	VirtualMachine* vm;
 
-	VMThreadData(MutatorThread* m, VirtualMachine *v) {
+	VMThreadData(VirtualMachine *v, Thread* m) {
 		this->mut = m;
 		this->vm = v;
 	}
 
   virtual void tracer(uintptr_t closure) = 0;
 
-	void attach();
-
 	virtual ~VMThreadData() {} // force the construction of a VT
 };
 
@@ -381,6 +380,10 @@
 	///   must be protected by rendezvous.threadLock
   ///
 	void reallocAllVmsData(int old, int n);
+
+	/// attach - attach the vm specific data of the given virtual machine
+	///
+	void attach(VirtualMachine* vm);
 };
 
 #ifndef RUNTIME_DWARF_EXCEPTIONS

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=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp Sun Dec  5 09:45:20 2010
@@ -19,9 +19,8 @@
 
 using namespace j3;
 
-JavaThread::JavaThread(mvm::MutatorThread* mut, Jnjvm* isolate)
-	: mvm::VMThreadData(mut, isolate) {
-  jniEnv = isolate->jniEnv;
+JavaThread::JavaThread(Jnjvm* vm, mvm::Thread* mut) : mvm::VMThreadData(vm, mut) {
+  jniEnv = vm->jniEnv;
   localJNIRefs = new JNILocalReferences();
   currentAddedReferences = NULL;
   javaThread = NULL;
@@ -30,8 +29,8 @@
 #ifdef SERVICE
   eipIndex = 0;
   replacedEIPs = new void*[100];
-  if (isolate->upcalls->newThrowable) {
-    ServiceException = isolate->upcalls->newThrowable->doNew(isolate);
+  if (vm->upcalls->newThrowable) {
+    ServiceException = vm->upcalls->newThrowable->doNew(vm);
   }
 #endif
 }
@@ -40,10 +39,11 @@
 	return (JavaThread*)mut->vmData;
 }
 
-JavaThread *JavaThread::create(Jnjvm* isolate) {
-	mvm::MutatorThread *mut = new mvm::MutatorThread(isolate->vmkit);
-	JavaThread *th   = new JavaThread(mut, isolate);
-	th->attach();
+JavaThread *JavaThread::create(Jnjvm* vm) {
+	mvm::Thread *mut = new mvm::MutatorThread(vm->vmkit);
+	JavaThread *th   = new JavaThread(vm, mut);
+	mut->allVmsData[vm->vmID] = th;
+	mut->attach(vm);
 	return th;
 }
 

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=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h Sun Dec  5 09:45:20 2010
@@ -116,11 +116,11 @@
 
   /// JavaThread - Creates a Java thread. 
   ///
-  JavaThread(mvm::MutatorThread*, Jnjvm* isolate);
+  JavaThread(Jnjvm* vm, mvm::Thread*mut);
 
   /// create - Creates a Java thread and a mutator thread.
   ///
-	static JavaThread* create(Jnjvm* isolate);
+	static JavaThread* create(Jnjvm* vm);
 
   /// j3Thread - gives the JavaThread associated with the mutator thread
   ///

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=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Sun Dec  5 09:45:20 2010
@@ -1070,14 +1070,16 @@
   
   // First create system threads.
   finalizerThread = new FinalizerThread(this);
-	javaFinalizerThread = new JavaThread(finalizerThread, this);
-	javaFinalizerThread->attach();
+	javaFinalizerThread = new JavaThread(this, finalizerThread);
+	finalizerThread->allVmsData[vmID] = javaFinalizerThread;
+	finalizerThread->attach(this);
   finalizerThread->start(
       (void (*)(mvm::Thread*))FinalizerThread::finalizerStart);
     
   referenceThread = new ReferenceThread(this);
-	javaReferenceThread = new JavaThread(referenceThread, this);
-	javaReferenceThread->attach();
+	javaReferenceThread = new JavaThread(this, referenceThread);
+	referenceThread->allVmsData[vmID] = javaReferenceThread;
+	referenceThread->attach(this);
   referenceThread->start(
       (void (*)(mvm::Thread*))ReferenceThread::enqueueStart);
   

Modified: vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/CommonThread/VMThreadData.cpp Sun Dec  5 09:45:20 2010
@@ -2,8 +2,3 @@
 #include "MutatorThread.h"
 
 using namespace mvm;
-
-void VMThreadData::attach() {
-	mut->vmData = this;
-	mut->MyVM = vm;
-}

Modified: vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp?rev=120941&r1=120940&r2=120941&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/CommonThread/ctthread.cpp Sun Dec  5 09:45:20 2010
@@ -48,6 +48,16 @@
 	vmkit()->unregisterPreparedThread(this);
 }
 
+void Thread::attach(VirtualMachine* vm) {
+	MyVM = vm;
+	vmData = allVmsData[vm->vmID];
+
+	if(!vmData) {
+		printf("should not happen yet\n");
+		abort();
+	}
+}
+
 // must be protected by rendezvous.threadLock
 void Thread::reallocAllVmsData(int old, int n) {
 	VMThreadData **newData = new VMThreadData*[n];





More information about the vmkit-commits mailing list