[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