[llvm-commits] [vmkit] r49490 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaJIT.cpp ServiceDomain.cpp ServiceDomain.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Thu Apr 10 10:17:12 PDT 2008


Author: geoffray
Date: Thu Apr 10 12:17:12 2008
New Revision: 49490

URL: http://llvm.org/viewvc/llvm-project?rev=49490&view=rev
Log:
Give the virtual machine as a parameter to all functions if compiled with MULTIPLE_VM


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp
    vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Thu Apr 10 12:17:12 2008
@@ -43,6 +43,10 @@
 #include "Reader.h"
 #include "Zip.h"
 
+#ifdef SERVICE_VM
+#include "ServiceDomain.h"
+#endif
+
 using namespace jnjvm;
 using namespace llvm;
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.cpp Thu Apr 10 12:17:12 2008
@@ -13,11 +13,40 @@
 #include "JnjvmModuleProvider.h"
 #include "ServiceDomain.h"
 
+#include <llvm/GlobalVariable.h>
+#include <llvm/Instructions.h>
+
 extern "C" struct JNINativeInterface JNI_JNIEnvTable;
 extern "C" const struct JNIInvokeInterface JNI_JavaVMTable;
 
 using namespace jnjvm;
 
+
+GlobalVariable* ServiceDomain::llvmDelegatee() {
+  if (!_llvmDelegatee) {
+    lock->lock();
+    if (!_llvmDelegatee) {
+      const Type* pty = mvm::jit::ptrType;
+      
+      mvm::jit::protectConstants();//->lock();
+      Constant* cons = 
+        ConstantExpr::getIntToPtr(ConstantInt::get(Type::Int64Ty, uint64(this)),
+                                  pty);
+      mvm::jit::unprotectConstants();//->unlock();
+
+      this->protectModule->lock();
+      _llvmDelegatee = new GlobalVariable(pty, true,
+                                    GlobalValue::ExternalLinkage,
+                                    cons, "",
+                                    this->module);
+      this->protectModule->unlock();
+    }
+    lock->unlock();
+  }
+  return _llvmDelegatee;
+}
+
+
 void ServiceDomain::destroyer(size_t sz) {
   mvm::jit::protectEngine->lock();
   mvm::jit::executionEngine->removeModuleProvider(TheModuleProvider);
@@ -70,6 +99,7 @@
   service->numThreads = 0;
   
   service->loadBootstrap();
+  service->lock = mvm::Lock::allocNormal();
   return service;
 }
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/ServiceDomain.h Thu Apr 10 12:17:12 2008
@@ -14,11 +14,22 @@
 
 #include "Jnjvm.h"
 
+namespace llvm {
+  class GlobalVariable;
+}
+
+namespace mvm {
+  class Lock;
+}
+
 namespace jnjvm {
 
 class ClassMap;
 
 class ServiceDomain : public Jnjvm {
+private:
+  llvm::GlobalVariable* _llvmDelegatee;
+  mvm::Lock* lock;
 public:
   static VirtualTable* VT;
 
@@ -27,7 +38,8 @@
   virtual void destroyer(size_t sz);
   void loadBootstrap();
   static ServiceDomain* allocateService(Jnjvm* callingVM);
-
+  llvm::GlobalVariable* llvmDelegatee();
+  
   ClassMap* classes;
   time_t started;
   uint64 executionTime;





More information about the llvm-commits mailing list