[vmkit-commits] [vmkit] r59517 - in /vmkit/trunk: include/mvm/VirtualMachine.h lib/JnJVM/LLVMRuntime/runtime-service.ll lib/JnJVM/VMCore/JavaJIT.cpp lib/JnJVM/VMCore/JavaRuntimeJIT.cpp lib/JnJVM/VMCore/Jnjvm.cpp lib/JnJVM/VMCore/Jnjvm.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/JnjvmModule.cpp lib/JnJVM/VMCore/JnjvmModule.h lib/JnJVM/VMCore/ServiceDomain.cpp lib/JnJVM/VMCore/ServiceDomain.h lib/Mvm/CommonThread/ctthread.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Nov 18 02:52:12 PST 2008


Author: geoffray
Date: Tue Nov 18 04:52:11 2008
New Revision: 59517

URL: http://llvm.org/viewvc/llvm-project?rev=59517&view=rev
Log:
More support for the SERVICE environment.


Removed:
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
Modified:
    vmkit/trunk/include/mvm/VirtualMachine.h
    vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-service.ll
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
    vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp

Modified: vmkit/trunk/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/VirtualMachine.h?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/VirtualMachine.h (original)
+++ vmkit/trunk/include/mvm/VirtualMachine.h Tue Nov 18 04:52:11 2008
@@ -46,7 +46,7 @@
   
 
 #ifdef ISOLATE
-  uint32 IsolateID;
+  size_t IsolateID;
 #endif
 
 #ifdef SERVICE

Modified: vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-service.ll
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-service.ll?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-service.ll (original)
+++ vmkit/trunk/lib/JnJVM/LLVMRuntime/runtime-service.ll Tue Nov 18 04:52:11 2008
@@ -2,14 +2,6 @@
 ;;;;;;;;;;;;;;;;;;;;;;;; Service specific methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-;;; JavaObjectAquireInSharedDomain - This function is called when starting a
-;;; synchronized block or method inside a shared method.
-declare void @JavaObjectAquireInSharedDomain(%JavaObject*)
-
-;;; JavaObjectReleaseInSharedDomain - This function is called when leaving a 
-;;; synchronized block or method inside a shared method.
-declare void @JavaObjectReleaseInSharedDomain(%JavaObject*)
-
 ;;; serviceCallStart - Mark the switching between services.
 declare void @serviceCallStart(i8*, i8*)
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Tue Nov 18 04:52:11 2008
@@ -45,6 +45,14 @@
 using namespace jnjvm;
 using namespace llvm;
 
+static bool needsInitialisationCheck(Class* cl, Class* compilingClass) {
+#ifdef SERVICE
+  return true;
+#else
+  return !(cl->isReadyForCompilation() || compilingClass->subclassOf(cl)); 
+#endif
+}
+
 bool JavaJIT::canBeInlined(JavaMethod* meth) {
   return (meth->canBeInlined &&
           meth != compilingMethod && inlineMethods[meth] == 0 &&
@@ -645,6 +653,7 @@
   Value* OldIsolateID = 0;
   Value* IsolateIDPtr = 0;
   Value* OldIsolate = 0;
+  Value* NewIsolate = 0;
   Value* IsolatePtr = 0;
   if (loader != loader->bootstrapLoader && isPublic(compilingMethod->access)) {
     threadId = CallInst::Create(module->llvm_frameaddress, module->constantZero,
@@ -683,10 +692,15 @@
                                            currentBlock);
      
     OldIsolate = new LoadInst(IsolatePtr, "", currentBlock);
-    Value* currentIsolate = module->getIsolate(loader->isolate);
-    currentIsolate = new LoadInst(currentIsolate, "", currentBlock);
-    new StoreInst(currentIsolate, IsolatePtr, currentBlock);
+    NewIsolate = module->getIsolate(loader->isolate);
+    NewIsolate = new LoadInst(NewIsolate, "", currentBlock);
+    new StoreInst(NewIsolate, IsolatePtr, currentBlock);
 
+    GEP.clear();
+    GEP.push_back(OldIsolate);
+    GEP.push_back(NewIsolate);
+    CallInst::Create(module->ServiceCallStartFunction, GEP.begin(), GEP.end(),
+                     "", currentBlock);
     BranchInst::Create(EndBB, currentBlock);
     currentBlock = EndBB;
   }
@@ -760,6 +774,11 @@
     new StoreInst(OldIsolateID, IsolateIDPtr, currentBlock);
     new StoreInst(OldIsolate, IsolatePtr, currentBlock);
 
+    std::vector<Value*> GEP;
+    GEP.push_back(OldIsolate);
+    GEP.push_back(NewIsolate);
+    CallInst::Create(module->ServiceCallStopFunction, GEP.begin(), GEP.end(),
+                     "", currentBlock);
     BranchInst::Create(EndBB, currentBlock);
     currentBlock = EndBB;
   }
@@ -1540,7 +1559,7 @@
 #endif
       uint32 clIndex = ctpInfo->getClassIndexFromMethod(index);
       Value* Cl = getResolvedClass(clIndex, true); 
-      if (!(meth && compilingClass->subclassOf(meth->classDef))) {
+      if (meth && needsInitialisationCheck(meth->classDef, compilingClass)) {
         CallInst::Create(module->ForceInitialisationCheckFunction, Cl, "",
                          currentBlock);
       }
@@ -1627,8 +1646,7 @@
                              module->JavaClassType, 0, doThrow);
   }
   
-  if (!(!clinit || (cl && (cl->isReadyForCompilation() || 
-                           compilingClass->subclassOf(cl)))))
+  if (!(!clinit || (cl && !needsInitialisationCheck(cl, compilingClass))))
     return invoke(module->InitialisationCheckFunction, node, "",
                   currentBlock);
   else
@@ -1708,8 +1726,7 @@
       type = LCI->getStaticType();
       Value* Cl = module->getNativeClass(field->classDef);
       Cl = new LoadInst(Cl, "", currentBlock);
-      if (!(compilingClass->subclassOf(field->classDef)) && 
-          !(compilingClass->isReadyForCompilation())) {
+      if (needsInitialisationCheck(field->classDef, compilingClass)) {
         Cl = invoke(module->InitialisationCheckFunction, Cl, "",
                     currentBlock);
       }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaRuntimeJIT.cpp Tue Nov 18 04:52:11 2008
@@ -401,3 +401,20 @@
 extern "C" void overflowThinLock(JavaObject* obj) {
   obj->overflowThinlock();
 }
+
+#ifdef SERVICE
+
+extern "C" void serviceCallStart(Jnjvm* OldService,
+                                 Jnjvm* NewService) {
+  printf("I have swtich from %d to %d\n", OldService->IsolateID,
+                                          NewService->IsolateID);
+
+  printf("Now the thread id is %d\n", mvm::Thread::get()->IsolateID);
+}
+
+extern "C" void serviceCallStop(Jnjvm* OldService,
+                                Jnjvm* NewService) {
+  printf("End service call\n");
+}
+
+#endif

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Nov 18 04:52:11 2008
@@ -41,6 +41,12 @@
 const char* Jnjvm::envSeparator = ":";
 const unsigned int Jnjvm::Magic = 0xcafebabe;
 
+#ifdef ISOLATE
+Jnjvm* Jnjvm::RunningIsolates[NR_ISOLATES];
+mvm::LockNormal Jnjvm::IsolateLock;
+#endif
+
+
 typedef void (*clinit_t)(UserConstantPool*);
 
 
@@ -885,6 +891,20 @@
   vm->threadSystem.nonDaemonLock.unlock();  
 }
 
+#ifdef SERVICE
+static void serviceCPUMonitor(mvm::Thread* th) {
+  while (true) {
+    sleep(1);
+    for(mvm::Thread* cur = (mvm::Thread*)th->next(); cur != th;
+        cur = (mvm::Thread*)cur->next()) {
+      mvm::VirtualMachine* executingVM = cur->MyVM;
+      assert(executingVM && "Thread with no VM!");
+      ++executingVM->executionTime;
+    }
+  }
+}
+#endif
+
 void Jnjvm::runApplication(int argc, char** argv) {
   argumentsInfo.argc = argc;
   argumentsInfo.argv = argv;
@@ -897,6 +917,10 @@
     
     bootstrapThread = new JavaThread(0, 0, this);
     bootstrapThread->start((void (*)(mvm::Thread*))mainJavaStart);
+#ifdef SERVICE
+    mvm::Thread* th = new JavaThread(0, 0, this);
+    th->start(serviceCPUMonitor);
+#endif
   } else {
     threadSystem.nonDaemonThreads = 0;
   }
@@ -916,7 +940,25 @@
   upcalls = bootstrapLoader->upcalls;
 
   throwable = upcalls->newThrowable;
-   
+ 
+#ifdef ISOLATE
+  IsolateLock.lock();
+  for (uint32 i = 0; i < NR_ISOLATES; ++i) {
+    if (RunningIsolates[i] == 0) {
+      RunningIsolates[i] = this;
+      IsolateID = i;
+      break;
+    }
+  }
+  IsolateLock.unlock();
+#endif
+
+}
+
+Jnjvm::~Jnjvm() {
+#ifdef ISOLATE
+  RunningIsolates[IsolateID] = 0;
+#endif
 }
 
 const UTF8* Jnjvm::asciizToInternalUTF8(const char* asciiz) {

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Tue Nov 18 04:52:11 2008
@@ -100,6 +100,7 @@
 /// Jnjvm - A JVM. Each execution of a program allocates a Jnjvm.
 ///
 class Jnjvm : public mvm::VirtualMachine {
+  friend class JnjvmClassLoader;
 public:
   /// allocator - Memory allocator of this JVM.
   ///
@@ -289,11 +290,15 @@
 
   /// ~Jnjvm - Destroy the JVM.
   ///
-  ~Jnjvm() {}
+  ~Jnjvm();
 
   /// Jnjvm - Allocate a default JVM, for VT initialization.
   ///
-  Jnjvm() {}
+  Jnjvm() { 
+#ifdef ISOLATE
+    IsolateID = 0;
+#endif
+  }
 
   /// addProperty - Adds a new property in the postProperties map.
   ///
@@ -322,6 +327,11 @@
   ///
   virtual void waitForExit();
 
+#ifdef ISOLATE
+  static Jnjvm* RunningIsolates[NR_ISOLATES];
+  static mvm::LockNormal IsolateLock;
+#endif
+
 };
 
 } // end namespace jnjvm

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Tue Nov 18 04:52:11 2008
@@ -246,7 +246,16 @@
   /// a new one each time a class loader is allocated.
   if (isolate->appClassLoader) {
     isolate = gc_new(Jnjvm)(bootstrapLoader);
-    isolate->appClassLoader = I->appClassLoader;
+
+    mvm::Thread* th = mvm::Thread::get();
+    mvm::VirtualMachine* OldVM = th->MyVM;
+    th->MyVM = isolate;
+    th->IsolateID = isolate->IsolateID;
+    
+    isolate->loadBootstrap();
+    
+    th->MyVM = OldVM;
+    th->IsolateID = OldVM->IsolateID;
   }
 #endif
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.cpp Tue Nov 18 04:52:11 2008
@@ -1100,7 +1100,12 @@
   GetArrayClassFunction = module->getFunction("getArrayClass");
 #endif
 #endif
-  
+ 
+#ifdef SERVICE
+  ServiceCallStartFunction = module->getFunction("serviceCallStart");
+  ServiceCallStopFunction = module->getFunction("serviceCallStop");
+#endif
+
 #ifdef WITH_TRACER
   MarkAndTraceFunction = module->getFunction("MarkAndTrace");
   JavaObjectTracerFunction = module->getFunction("JavaObjectTracer");

Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmModule.h Tue Nov 18 04:52:11 2008
@@ -302,6 +302,11 @@
 #endif
 #endif
 
+#ifdef SERVICE
+  llvm::Function* ServiceCallStartFunction;
+  llvm::Function* ServiceCallStopFunction;
+#endif
+
   llvm::Function* GetClassDelegateeFunction;
   llvm::Function* ArrayLengthFunction;
   llvm::Function* GetVTFunction;

Removed: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp?rev=59516&view=auto

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (removed)
@@ -1,206 +0,0 @@
-//===------- ServiceDomain.cpp - Service domain description ---------------===//
-//
-//                              JnJVM
-//
-// This file is distributed under the University of Illinois Open Source 
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifdef SERVICE_VM
-#include "mvm/JIT.h"
-
-#include "JavaJIT.h"
-#include "JavaThread.h"
-#include "JavaUpcalls.h"
-#include "JnjvmModuleProvider.h"
-#include "ServiceDomain.h"
-
-extern "C" struct JNINativeInterface JNI_JNIEnvTable;
-extern "C" const struct JNIInvokeInterface JNI_JavaVMTable;
-
-
-using namespace jnjvm;
-
-JavaMethod* ServiceDomain::ServiceErrorInit;
-Class* ServiceDomain::ServiceErrorClass;
-ServiceDomain* ServiceDomain::bootstrapDomain;
-
-// OSGi specific fields
-JavaField* ServiceDomain::OSGiFramework;
-JavaMethod* ServiceDomain::uninstallBundle;
-
-
-ServiceDomain::~ServiceDomain() {
-  delete lock;
-}
-
-void ServiceDomain::print(mvm::PrintBuffer* buf) const {
-  buf->write("Service domain: ");
-  buf->write(name);
-}
-
-ServiceDomain* ServiceDomain::allocateService(JavaIsolate* callingVM) {
-  ServiceDomain* service = vm_new(callingVM, ServiceDomain)();
-  service->threadSystem = callingVM->threadSystem;
-#ifdef MULTIPLE_GC
-  service->GC = Collector::allocate();
-#endif
-  
-
-  service->classpath = callingVM->classpath;
-  service->bootClasspathEnv = callingVM->bootClasspathEnv;
-  service->libClasspathEnv = callingVM->libClasspathEnv;
-  service->bootClasspath = callingVM->bootClasspath;
-  service->functions = vm_new(service, FunctionMap)();
-  service->functionDefs = vm_new(service, FunctionDefMap)();
-  service->module = new JnjvmModule("Service Domain");
-  std::string str = 
-    mvm::jit::executionEngine->getTargetData()->getStringRepresentation();
-  service->module->setDataLayout(str);
-  service->protectModule = mvm::Lock::allocNormal();
-  service->TheModuleProvider = new JnjvmModuleProvider(service->module,
-                                                       service->functions,
-                                                       service->functionDefs); 
-  
-
-#ifdef MULTIPLE_GC
-  mvm::jit::memoryManager->addGCForModule(service->module, service->GC);
-#endif
-  JavaJIT::initialiseJITIsolateVM(service);
-  
-  service->name = "service";
-  service->jniEnv = &JNI_JNIEnvTable;
-  service->javavmEnv = &JNI_JavaVMTable;
-  service->appClassLoader = callingVM->appClassLoader;
-
-  // We copy so that bootstrap utf8 such as "<init>" are unique  
-  service->hashUTF8 = vm_new(service, UTF8Map)();
-  callingVM->hashUTF8->copy(service->hashUTF8);
-  service->hashStr = vm_new(service, StringMap)();
-  service->bootstrapClasses = callingVM->bootstrapClasses;
-  service->loadedMethods = vm_new(service, MethodMap)();
-  service->loadedFields = vm_new(service, FieldMap)();
-  service->javaTypes = vm_new(service, TypeMap)(); 
-  service->javaSignatures = vm_new(service, SignMap)(); 
-  service->globalRefsLock = mvm::Lock::allocNormal();
-#ifdef MULTIPLE_VM
-  service->statics = vm_new(service, StaticInstanceMap)();  
-  service->delegatees = vm_new(service, DelegateeMap)();  
-#endif
-  
-  // A service is related to a class loader
-  // Here are the classes it loaded
-  service->classes = vm_new(service, ClassMap)();
-
-  service->executionTime = 0;
-  service->numThreads = 0;
-  
-  service->lock = mvm::Lock::allocNormal();
-  service->state = DomainLoaded;
-  return service;
-}
-
-void ServiceDomain::serviceError(ServiceDomain* errorDomain,
-                                 const char* str) {
-  if (ServiceErrorClass) {
-    JavaObject* obj = (*ServiceErrorClass)(bootstrapDomain);
-    ServiceErrorInit->invokeIntVirtual(bootstrapDomain, 
-                                       bootstrapDomain->asciizToStr(str),
-                                       errorDomain);
-    JavaThread::throwException(obj);
-  } else {
-    fprintf(stderr, str);
-    abort();
-  }
-}
-
-ServiceDomain* ServiceDomain::getDomainFromLoader(JavaObject* loader) {
-  ServiceDomain* vm = 
-    (ServiceDomain*)(*Classpath::vmdataClassLoader)(loader).PointerVal;
-  return vm;
-}
-
-#include "gccollector.h"
-#include "gcthread.h"
-
-extern "C" void serviceCallStart(ServiceDomain* caller,
-                                 ServiceDomain* callee) {
-  assert(caller && "No caller in service start?");
-  assert(callee && "No callee in service start?");
-  assert(caller->getVirtualTable() == ServiceDomain::VT && 
-         "Caller not a service domain?");
-  assert(callee->getVirtualTable() == ServiceDomain::VT && 
-         "Callee not a service domain?");
-  if (callee->state != DomainLoaded) {
-    ServiceDomain::serviceError(callee, "calling a stopped bundle");
-  }
-  JavaThread* th = JavaThread::get();
-  th->isolate = callee;
-  caller->lock->lock();
-  caller->interactions[callee]++;
-  caller->lock->unlock();
-  mvm::GCThreadCollector* cur = mvm::GCCollector::threads->myloc();
-  cur->meta = callee;
-}
-
-extern "C" void serviceCallStop(ServiceDomain* caller,
-                                ServiceDomain* callee) {
-  assert(caller && "No caller in service stop?");
-  assert(callee && "No callee in service stop?");
-  assert(caller->getVirtualTable() == ServiceDomain::VT && 
-         "Caller not a service domain?");
-  assert(callee->getVirtualTable() == ServiceDomain::VT && 
-         "Callee not a service domain?");
-  if (caller->state != DomainLoaded) {
-    ServiceDomain::serviceError(caller, "Returning to a stopped bundle");
-  }
-  JavaThread* th = JavaThread::get();
-  th->isolate = caller;
-  mvm::GCThreadCollector* cur = mvm::GCCollector::threads->myloc();
-  cur->meta = caller;
-}
-
-
-static int updateCPUUsage(void* unused) {
-  mvm::GCThreadCollector *cur;
-  while (true) {
-    sleep(1);
-    for(cur=(mvm::GCThreadCollector *)mvm::GCCollector::threads->base.next();
-        cur!=&(mvm::GCCollector::threads->base); 
-        cur=(mvm::GCThreadCollector *)cur->next()) {
-      ServiceDomain* executingDomain = (ServiceDomain*)cur->meta;
-      if (executingDomain)
-        ++executingDomain->executionTime;
-    }
-  }
-}
-
-void ServiceDomain::initialise(ServiceDomain* boot) {
-  ServiceDomain::bootstrapDomain = boot;
-  Jnjvm::bootstrapVM->appClassLoader = boot->appClassLoader;
-  (*Classpath::vmdataClassLoader)(boot->appClassLoader, (JavaObject*)boot);
-  int tid = 0;
-  mvm::Thread::start(&tid, (int (*)(void *))updateCPUUsage, 0);
-  ServiceErrorClass = UPCALL_CLASS(Jnjvm::bootstrapVM, "JnJVMBundleException");
-  ServiceErrorInit = UPCALL_METHOD(Jnjvm::bootstrapVM, "JnjvmBundleException", 
-                                   "<init>", 
-                                   "(Ljava/lang/String;Ljava/lang/Object;)V",
-                                   ACC_VIRTUAL);
-  Class* MainClass = bootstrapDomain->constructClass(bootstrapDomain->asciizConstructUTF8("Main"), 
-                                                     Jnjvm::bootstrapVM->appClassLoader);
-  OSGiFramework = bootstrapDomain->constructField(MainClass, bootstrapDomain->asciizConstructUTF8("m_felix"),
-                                            bootstrapDomain->asciizConstructUTF8("Lorg/apache/felix/framework/Felix;"),
-                                            ACC_STATIC);
-  uninstallBundle = bootstrapDomain->constructMethod(OSGiFramework->classDef, bootstrapDomain->asciizConstructUTF8("uninstallBundle"),
-                                                     bootstrapDomain->asciizConstructUTF8("(Lorg/apache/felix/framework/FelixBundle;)V"),
-                                                     ACC_VIRTUAL);
-}
-
-void ServiceDomain::startExecution() {
-  JavaThread::get()->isolate = this;
-  mvm::GCThreadCollector* cur = mvm::GCCollector::threads->myloc();
-  cur->meta = this;
-}
-
-#endif

Removed: vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h?rev=59516&view=auto

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h (removed)
@@ -1,70 +0,0 @@
-//===--------- ServiceDomain.h - Service domain description ---------------===//
-//
-//                              JnJVM
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef JNJVM_SERVICE_DOMAIN_H
-#define JNJVM_SERVICE_DOMAIN_H
-
-#include <sys/time.h>
-#include <time.h>
-
-#include <map>
-
-#include "JavaIsolate.h"
-
-namespace mvm {
-  class Lock;
-}
-
-namespace jnjvm {
-
-class ClassMap;
-
-typedef enum DomainState {
-  DomainLoaded, DomainUnloading, DomainUnloaded
-}DomainState;
-
-class ServiceDomain : public JavaIsolate {
-public:
-  static VirtualTable* VT;
-
-  virtual void print(mvm::PrintBuffer* buf) const;
-  virtual void TRACER;
-  ~ServiceDomain();
-  static ServiceDomain* allocateService(JavaIsolate* callingVM);
-  static void serviceError(ServiceDomain* error, const char* str);
-   
-  mvm::Lock* lock;
-  ClassMap* classes;
-  uint64 executionTime;
-  uint64 numThreads;
-  std::map<ServiceDomain*, uint64> interactions;
-  DomainState state;
-
-  static ServiceDomain* getDomainFromLoader(JavaObject* loader);
-  static JavaMethod* ServiceErrorInit;
-  static Class* ServiceErrorClass;
-
-  static ServiceDomain* bootstrapDomain;
-
-  static bool isLockableDomain(Jnjvm* vm) {
-    return (vm == Jnjvm::bootstrapVM || vm == bootstrapDomain);
-  }
-
-  static void initialise(ServiceDomain* boot);
-  void startExecution();
-  
-  // OSGi specific fields
-  static JavaField* OSGiFramework;
-  static JavaMethod* uninstallBundle;
-
-};
-
-} // end namespace jnjvm
-
-#endif //JNJVM_SERVICE_DOMAIN_H

Modified: vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp?rev=59517&r1=59516&r2=59517&view=diff

==============================================================================
--- vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp (original)
+++ vmkit/trunk/lib/Mvm/CommonThread/ctthread.cpp Tue Nov 18 04:52:11 2008
@@ -134,6 +134,7 @@
 void Thread::internalThreadStart(mvm::Thread* th) {
   th->baseSP  = (void*)&th;
 #ifdef ISOLATE
+  assert(th->MyVM && "VM not set in a thread");
   th->IsolateID = th->MyVM->IsolateID;
 #endif
   Collector::inject_my_thread(th); 





More information about the vmkit-commits mailing list