[vmkit-commits] [vmkit] r119497 - in /vmkit/branches/multi-vm: include/mvm/Threads/Thread.h lib/J3/Classpath/ClasspathVMThread.inc lib/J3/Classpath/JavaUpcalls.cpp lib/J3/Compiler/JavaAOTCompiler.cpp lib/J3/VMCore/JavaThread.cpp lib/J3/VMCore/JavaThread.h lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h

Gael Thomas gael.thomas at lip6.fr
Wed Nov 17 07:06:00 PST 2010


Author: gthomas
Date: Wed Nov 17 09:06:00 2010
New Revision: 119497

URL: http://llvm.org/viewvc/llvm-project?rev=119497&view=rev
Log:
split JavaThread and mvm::MutatorThread

Modified:
    vmkit/branches/multi-vm/include/mvm/Threads/Thread.h
    vmkit/branches/multi-vm/lib/J3/Classpath/ClasspathVMThread.inc
    vmkit/branches/multi-vm/lib/J3/Classpath/JavaUpcalls.cpp
    vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.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/Jnjvm.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h

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=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/Threads/Thread.h (original)
+++ vmkit/branches/multi-vm/include/mvm/Threads/Thread.h Wed Nov 17 09:06:00 2010
@@ -138,6 +138,8 @@
 
 class ExceptionBuffer;
 
+class VMThreadData {};
+
 /// Thread - This class is the base of custom virtual machines' Thread classes.
 /// It provides static functions to manage threads. An instance of this class
 /// contains all thread-specific informations.
@@ -395,7 +397,7 @@
 
   /// vmData - vm specific data
   ///
-	void* vmData;
+	VMThreadData* vmData;
 };
 
 #ifndef RUNTIME_DWARF_EXCEPTIONS

Modified: vmkit/branches/multi-vm/lib/J3/Classpath/ClasspathVMThread.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/Classpath/ClasspathVMThread.inc?rev=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/Classpath/ClasspathVMThread.inc (original)
+++ vmkit/branches/multi-vm/lib/J3/Classpath/ClasspathVMThread.inc Wed Nov 17 09:06:00 2010
@@ -86,7 +86,7 @@
   javaThread = vm->upcalls->assocThread->getInstanceObjectField(vmThread);
   assert(javaThread && "VMThread with no Java equivalent");
  
-  JavaThread* th = new JavaThread(javaThread, vmThread, vm);
+	mvm::MutatorThread* th = JavaThread::create(javaThread, vmThread, vm);
   if (!th) vm->outOfMemoryError();
   th->start((void (*)(mvm::Thread*))start);
 

Modified: vmkit/branches/multi-vm/lib/J3/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/Classpath/JavaUpcalls.cpp?rev=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/Classpath/JavaUpcalls.cpp Wed Nov 17 09:06:00 2010
@@ -279,7 +279,7 @@
   RG = rootGroup->getStaticObjectField();
   assert(RG && "No root group");
   assert(vm->getMainThread() && "VM did not set its main thread");
-  CreateJavaThread(vm, (JavaThread*)vm->getMainThread(), "main", RG);
+  CreateJavaThread(vm, JavaThread::j3Thread(vm->getMainThread()), "main", RG);
 
   // Create the "system" group.
   SystemGroup = threadGroup->doNew(vm);
@@ -289,11 +289,11 @@
 
   // Create the finalizer thread.
   assert(vm->getFinalizerThread() && "VM did not set its finalizer thread");
-  CreateJavaThread(vm, vm->getFinalizerThread(), "Finalizer", SystemGroup);
+  CreateJavaThread(vm, JavaThread::j3Thread(vm->getFinalizerThread()), "Finalizer", SystemGroup);
   
   // Create the enqueue thread.
   assert(vm->getEnqueueThread() && "VM did not set its enqueue thread");
-  CreateJavaThread(vm, vm->getEnqueueThread(), "Reference", SystemGroup);
+  CreateJavaThread(vm, JavaThread::j3Thread(vm->getEnqueueThread()), "Reference", SystemGroup);
 }
 
 extern "C" void nativeInitWeakReference(JavaObjectReference* reference,

Modified: vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp?rev=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/Compiler/JavaAOTCompiler.cpp Wed Nov 17 09:06:00 2010
@@ -2130,7 +2130,7 @@
 
 void JavaAOTCompiler::compileFile(Jnjvm* vm, const char* n) {
   name = n;
-  JavaThread* th = new JavaThread(0, 0, vm);
+	mvm::MutatorThread* th = JavaThread::create(0, 0, vm);
   vm->setMainThread(th);
   th->start((void (*)(mvm::Thread*))mainCompilerStart);
   vm->waitForExit();

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=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.cpp Wed Nov 17 09:06:00 2010
@@ -47,6 +47,16 @@
 #endif
 }
 
+JavaThread* JavaThread::j3Thread(mvm::Thread* mut) {
+	return (JavaThread*)mut->vmData;
+}
+
+mvm::MutatorThread *JavaThread::create(JavaObject* thread, JavaObject* vmth, Jnjvm* isolate) {
+	mvm::MutatorThread *res = (mvm::MutatorThread*)new JavaThread(thread, vmth, isolate);
+	res->vmData = (mvm::VMThreadData*)res;
+	return res;
+}
+
 JavaThread::~JavaThread() {
   delete localJNIRefs;
 #ifdef SERVICE

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=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/JavaThread.h Wed Nov 17 09:06:00 2010
@@ -145,11 +145,16 @@
   /// ~JavaThread - Delete any potential malloc'ed objects used by this thread.
   ///
   ~JavaThread();
-  
+
+private:  
   /// JavaThread - Creates a Java thread.
   ///
   JavaThread(JavaObject* thread, JavaObject* vmThread, Jnjvm* isolate);
 
+public:
+	static mvm::MutatorThread* create(JavaObject* thread, JavaObject* vmThread, Jnjvm* isolate);
+	static JavaThread* j3Thread(mvm::Thread* mut);
+
   /// get - Get the current thread as a JnJVM object.
   ///
   static JavaThread* get() {

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=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Wed Nov 17 09:06:00 2010
@@ -1088,11 +1088,11 @@
   JnjvmClassLoader* loader = bootstrapLoader;
   
   // First create system threads.
-  finalizerThread = new JavaThread(0, 0, this);
-  finalizerThread->start((void (*)(mvm::Thread*))finalizerStart);
+  finalizerThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+  finalizerThread->start(finalizerStart);
     
-  enqueueThread = new JavaThread(0, 0, this);
-  enqueueThread->start((void (*)(mvm::Thread*))enqueueStart);
+  enqueueThread = JavaThread::j3Thread(JavaThread::create(0, 0, this));
+  enqueueThread->start(enqueueStart);
   
   // Initialise the bootstrap class loader if it's not
   // done already.
@@ -1132,7 +1132,7 @@
 #endif
   // The initialization code of the classes initialized below may require
   // to get the Java thread, so we create the Java thread object first.
-  upcalls->InitializeThreading(this);
+	upcalls->InitializeThreading(this);
   
   LOAD_CLASS(upcalls->newClass);
   LOAD_CLASS(upcalls->newConstructor);
@@ -1282,7 +1282,7 @@
   return;
 }
 
-void Jnjvm::mainJavaStart(JavaThread* thread) {
+void Jnjvm::mainJavaStart(mvm::Thread* thread) {
 
   JavaString* str = NULL;
   JavaObject* instrumenter = NULL;
@@ -1294,7 +1294,7 @@
   llvm_gcroot(args, 0);
   llvm_gcroot(exc, 0);
 
-  Jnjvm* vm = thread->getJVM();
+  Jnjvm* vm = JavaThread::j3Thread(thread)->getJVM();
   vm->bootstrapLoader->analyseClasspathEnv(vm->bootstrapLoader->bootClasspathEnv);
   vm->argumentsInfo.readArgs(vm);
   if (vm->argumentsInfo.className == NULL) {
@@ -1306,7 +1306,7 @@
   vm->argumentsInfo.argv = vm->argumentsInfo.argv + pos - 1;
   vm->argumentsInfo.argc = vm->argumentsInfo.argc - pos + 1;
 
-  vm->mainThread = thread;
+	//  vm->mainThread = thread;
 
   TRY {
     vm->loadBootstrap();
@@ -1393,12 +1393,13 @@
   sa.sa_flags |= SA_RESTART;
   sigaction(SIGUSR1, &sa, NULL);
 
-  mvm::Thread* th = new JavaThread(0, 0, this);
+  mvm::Thread* th = JavaThread::create(0, 0, this);
   th->start(serviceCPUMonitor);
 #endif
    
-  mainThread = new JavaThread(0, 0, this);
-  mainThread->start((void (*)(mvm::Thread*))mainJavaStart);
+	mainThread = JavaThread::create(0, 0, this);
+	mainJ3Thread = JavaThread::j3Thread(mainThread);
+  mainThread->start(mainJavaStart);
 }
 
 Jnjvm::Jnjvm(mvm::BumpPtrAllocator& Alloc, JnjvmBootstrapLoader* loader) : 

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h?rev=119497&r1=119496&r2=119497&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h Wed Nov 17 09:06:00 2010
@@ -25,6 +25,10 @@
 #include "JNIReferences.h"
 #include "LockedMap.h"
 
+namespace mvm {
+	class MutatorThread;
+}
+
 namespace j3 {
 
 class ArrayObject;
@@ -120,11 +124,11 @@
   
   /// finalizerThread - The thread that finalizes Java objects.
   ///
-  JavaThread* finalizerThread;
+	JavaThread* finalizerThread;
  
   /// enqueueThread - The thread that enqueue Java references.
   ///
-  JavaThread* enqueueThread;
+	JavaThread* enqueueThread;
 
   /// CreateError - Creates a Java object of the specified exception class
   /// and calling its <init> function.
@@ -160,7 +164,7 @@
    
   /// mainJavaStart - Starts the execution of the application in a Java thread.
   ///
-  static void mainJavaStart(JavaThread* thread);
+  static void mainJavaStart(mvm::Thread* thread);
   
   /// mainCompileStart - Starts the static compilation of classes in a Java
   /// thread.
@@ -239,6 +243,12 @@
   /// hashStr - Hash map of java/lang/String objects allocated by this JVM.
   ///
   StringMap hashStr;
+
+  /// hashStr - Hash map of java/lang/String objects allocated by this JVM.
+	/// mainJ3Thread - the main j3 thread
+	JavaThread* mainJ3Thread;
+
+	JavaThread *getMainJ3Thread() { return mainJ3Thread; }
  
 public:
   
@@ -304,7 +314,7 @@
   
   /// getFinalizerThread - Get the finalizer thread of this VM.
   ///
-  JavaThread* getFinalizerThread() const { return finalizerThread; }
+	JavaThread* getFinalizerThread() const { return finalizerThread; }
   
   /// setEnqueueThread - Set the enqueue thread of this VM.
   ///
@@ -312,7 +322,7 @@
   
   /// getEnqueueThread - Get the enqueue thread of this VM.
   ///
-  JavaThread* getEnqueueThread() const { return enqueueThread; }
+	JavaThread* getEnqueueThread() const { return enqueueThread; }
 
   /// ~Jnjvm - Destroy the JVM.
   ///





More information about the vmkit-commits mailing list